From d7f8970ad3d79187462b32a3b44d91442abede78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AE=9D=E8=BF=AA?= Date: Sat, 28 Dec 2024 12:50:35 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E6=A1=86=E6=9E=B6DFX?= =?UTF-8?q?=E5=8A=A8=E7=94=BB=E6=8F=90=E4=BA=A4PR?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 陈宝迪 --- .../ets/test/DFXDrawTest/DFXDraw.test.ets | 145 ++++ .../DFXScrollEventObserver.test.ets | 711 ++++++++++++++++++ .../entry/src/ohosTest/ets/test/List.test.ets | 253 +++++++ .../SubAceStatusManagerDataDotting.test.ets | 83 ++ ...nimationCustomTransitionInterface.test.ets | 73 ++ .../UIAnimationParticleOption.test.ets | 213 ++++++ .../UIAnimationParticleSpin.test.ets | 73 ++ ...UIAttributeFontInterfaceButton001.test.ets | 105 +++ ...UIAttributeFontInterfaceButton002.test.ets | 131 ++++ ...UIAttributeFontInterfaceButton003.test.ets | 105 +++ ...UIAttributeFontInterfaceButton004.test.ets | 105 +++ ...IAttributeFontInterfaceButton0190.test.ets | 105 +++ ...IAttributeFontInterfaceButton0310.test.ets | 105 +++ ...IAttributeFontInterfaceButton0320.test.ets | 105 +++ ...UIAttributeFontInterfaceCanvas001.test.ets | 103 +++ ...UIAttributeFontInterfaceCanvas002.test.ets | 104 +++ ...UIAttributeFontInterfaceCanvas003.test.ets | 104 +++ ...UIAttributeFontInterfaceCanvas004.test.ets | 103 +++ ...UIAttributeFontInterfaceCanvas005.test.ets | 102 +++ ...UIAttributeFontInterfaceCanvas006.test.ets | 133 ++++ ...UIAttributeFontInterfaceCanvas007.test.ets | 107 +++ ...UIAttributeFontInterfaceCircle001.test.ets | 104 +++ ...UIAttributeFontInterfaceCircle002.test.ets | 106 +++ ...UIAttributeFontInterfaceCircle003.test.ets | 106 +++ ...UIAttributeFontInterfaceCircle004.test.ets | 106 +++ ...UIAttributeFontInterfaceCircle005.test.ets | 106 +++ ...IAttributeFontInterfaceCircle0210.test.ets | 135 ++++ ...IAttributeFontInterfaceCircle0270.test.ets | 102 +++ ...ibuteFontInterfaceCustomDialog001.test.ets | 120 +++ ...ibuteFontInterfaceCustomDialog002.test.ets | 115 +++ ...ibuteFontInterfaceCustomDialog003.test.ets | 116 +++ ...ibuteFontInterfaceCustomDialog004.test.ets | 116 +++ ...ibuteFontInterfaceCustomDialog005.test.ets | 201 +++++ ...ibuteFontInterfaceCustomDialog006.test.ets | 118 +++ ...ibuteFontInterfaceCustomDialog007.test.ets | 118 +++ ...buteFontInterfaceCustomDialog0330.test.ets | 58 ++ ...AttributeFontInterfaceDarkMode001.test.ets | 106 +++ .../UIAttributeFontInterfaceImage001.test.ets | 104 +++ .../UIAttributeFontInterfaceImage002.test.ets | 103 +++ .../UIAttributeFontInterfaceImage003.test.ets | 104 +++ .../UIAttributeFontInterfaceImage004.test.ets | 100 +++ .../UIAttributeFontInterfaceImage005.test.ets | 102 +++ .../UIAttributeFontInterfaceImage006.test.ets | 103 +++ ...UIAttributeFontInterfaceImage0220.test.ets | 135 ++++ .../UIAttributeFontInterfaceMenu001.test.ets | 336 +++++++++ .../UIAttributeFontInterfaceMenu002.test.ets | 103 +++ .../UIAttributeFontInterfaceMenu003.test.ets | 104 +++ .../UIAttributeFontInterfaceMenu004.test.ets | 103 +++ .../UIAttributeFontInterfaceMenu005.test.ets | 103 +++ .../UIAttributeFontInterfaceMenu006.test.ets | 104 +++ .../UIAttributeFontInterfaceMenu007.test.ets | 104 +++ .../UIAttributeFontInterfacePopup001.test.ets | 105 +++ .../UIAttributeFontInterfacePopup002.test.ets | 104 +++ .../UIAttributeFontInterfacePopup003.test.ets | 104 +++ .../UIAttributeFontInterfacePopup004.test.ets | 104 +++ .../UIAttributeFontInterfacePopup005.test.ets | 57 ++ .../UIAttributeFontInterfacePopup006.test.ets | 104 +++ .../UIAttributeFontInterfacePopup007.test.ets | 291 +++++++ ...UIAttributeFontInterfaceSlider001.test.ets | 104 +++ ...UIAttributeFontInterfaceSlider002.test.ets | 104 +++ ...UIAttributeFontInterfaceSlider003.test.ets | 104 +++ ...UIAttributeFontInterfaceSlider004.test.ets | 104 +++ ...UIAttributeFontInterfaceSlider005.test.ets | 104 +++ ...UIAttributeFontInterfaceSlider006.test.ets | 104 +++ ...UIAttributeFontInterfaceSlider007.test.ets | 104 +++ ...IAttributeFontInterfaceSlider0180.test.ets | 135 ++++ .../UIAttributeFontInterfaceText001.test.ets | 104 +++ .../UIAttributeFontInterfaceText002.test.ets | 104 +++ .../UIAttributeFontInterfaceText003.test.ets | 104 +++ .../UIAttributeFontInterfaceText004.test.ets | 281 +++++++ .../UIAttributeFontInterfaceText005.test.ets | 105 +++ .../UIAttributeFontInterfaceText0140.test.ets | 105 +++ .../UIAttributeFontInterfaceText0200.test.ets | 105 +++ .../UIAttributeFontInterfaceVideo001.test.ets | 105 +++ .../UIAttributeFontInterfaceVideo002.test.ets | 106 +++ .../UIAttributeFontInterfaceVideo003.test.ets | 106 +++ .../UIAttributeFontInterfaceVideo004.test.ets | 106 +++ .../UIAttributeFontInterfaceVideo005.test.ets | 106 +++ .../UIAttributeFontInterfaceVideo006.test.ets | 106 +++ .../UIAttributeFontInterfaceVideo007.test.ets | 291 +++++++ ...oxActionsheetInterfaceReplacement.test.ets | 200 +++++ ...oxAlertDialogInterfaceReplacement.test.ets | 440 +++++++++++ ...xCalendarPickerFeatureReplacement.test.ets | 116 +++ ...oxMenuStyleEnhancementReplacement.test.ets | 485 ++++++++++++ ...omponentUISupportColorReplacement.test.ets | 160 ++++ ...nmentCanvasModifierReplacement001.test.ets | 74 ++ ...ialogCalendarPickerReplacement001.test.ets | 98 +++ ...tCustomIzationStyleReplacement001.test.ets | 100 +++ .../UIRenderComComponent.test.ets | 99 +++ .../UIWebDrawPipeline.test.ets | 365 +++++++++ .../src/ohosTest/ets/test/model/Utils.ets | 16 + .../testability/pages/DFXDraw/DFXDraw0010.ets | 93 +++ .../DFXScrollEventObserver0010.ets | 102 +++ .../DFXScrollEventObserver0020.ets | 81 ++ .../DFXScrollEventObserver0030.ets | 120 +++ .../DFXScrollEventObserver0040.ets | 112 +++ .../DFXScrollEventObserver0050.ets | 94 +++ .../DFXScrollEventObserver0060.ets | 151 ++++ .../DFXScrollEventObserver0090.ets | 118 +++ .../DFXScrollEventObserver0100.ets | 114 +++ .../DFXScrollEventObserver0110.ets | 160 ++++ .../DFXScrollEventObserver0140.ets | 97 +++ .../WaterFlowDataSource.ets | 142 ++++ .../SubAceStatusManagerDataDotting0010.ets | 37 + ...AnimationCustomTransitionInterface0050.ets | 35 + .../UIAnimationParticleOption0020.ets | 43 ++ .../UIAnimationParticleOption0040.ets | 42 ++ .../UIAnimationParticleOption0060.ets | 43 ++ .../UIAnimationParticleOption0090.ets | 44 ++ .../UIAnimationParticleOption0110.ets | 44 ++ .../UIAnimationParticleOption0130.ets | 42 ++ .../UIAnimationParticleOption0170.ets | 42 ++ .../UIAnimationParticleOption0180.ets | 42 ++ .../UIAnimationParticleOption0190.ets | 42 ++ .../UIAnimationParticleOption0200.ets | 42 ++ .../UIAnimationParticleOption0230.ets | 42 ++ .../UIAnimationParticleSpin0090.ets | 52 ++ .../UIAttributeFontInterfaceButton001.ets | 28 + .../UIAttributeFontInterfaceButton002.ets | 179 +++++ .../UIAttributeFontInterfaceButton003.ets | 24 + .../UIAttributeFontInterfaceButton004.ets | 28 + .../UIAttributeFontInterfaceButton0190.ets | 28 + .../UIAttributeFontInterfaceButton0310.ets | 28 + .../UIAttributeFontInterfaceButton0320.ets | 28 + .../UIAttributeFontInterfaceCanvas001.ets | 38 + .../UIAttributeFontInterfaceCanvas002.ets | 38 + .../UIAttributeFontInterfaceCanvas003.ets | 37 + .../UIAttributeFontInterfaceCanvas004.ets | 40 + .../UIAttributeFontInterfaceCanvas005.ets | 40 + .../UIAttributeFontInterfaceCanvas006.ets | 173 +++++ .../UIAttributeFontInterfaceCanvas007.ets | 149 ++++ .../UIAttributeFontInterfaceCircle001.ets | 43 ++ .../UIAttributeFontInterfaceCircle002.ets | 43 ++ .../UIAttributeFontInterfaceCircle003.ets | 43 ++ .../UIAttributeFontInterfaceCircle004.ets | 43 ++ .../UIAttributeFontInterfaceCircle005.ets | 31 + .../UIAttributeFontInterfaceCircle0210.ets | 72 ++ .../UIAttributeFontInterfaceCircle0270.ets | 34 + ...IAttributeFontInterfaceCustomDialog001.ets | 138 ++++ ...IAttributeFontInterfaceCustomDialog002.ets | 139 ++++ ...IAttributeFontInterfaceCustomDialog003.ets | 135 ++++ ...IAttributeFontInterfaceCustomDialog004.ets | 138 ++++ ...IAttributeFontInterfaceCustomDialog005.ets | 149 ++++ ...IAttributeFontInterfaceCustomDialog006.ets | 137 ++++ ...IAttributeFontInterfaceCustomDialog007.ets | 88 +++ ...AttributeFontInterfaceCustomDialog0330.ets | 149 ++++ .../UIAttributeFontInterfaceDarkMode0040.ets | 36 + .../UIAttributeFontInterfaceDarkMode0050.ets | 37 + .../UIAttributeFontInterfaceImage001.ets | 77 ++ .../UIAttributeFontInterfaceImage002.ets | 77 ++ .../UIAttributeFontInterfaceImage003.ets | 77 ++ .../UIAttributeFontInterfaceImage004.ets | 77 ++ .../UIAttributeFontInterfaceImage005.ets | 64 ++ .../UIAttributeFontInterfaceImage006.ets | 74 ++ .../UIAttributeFontInterfaceImage0220.ets | 72 ++ .../UIAttributeFontInterfaceMenu001.ets | 164 ++++ .../UIAttributeFontInterfaceMenu002.ets | 28 + .../UIAttributeFontInterfaceMenu003.ets | 42 ++ .../UIAttributeFontInterfaceMenu004.ets | 43 ++ .../UIAttributeFontInterfaceMenu005.ets | 43 ++ .../UIAttributeFontInterfaceMenu006.ets | 43 ++ .../UIAttributeFontInterfaceMenu007.ets | 43 ++ .../UIAttributeFontInterfacePopup001.ets | 62 ++ .../UIAttributeFontInterfacePopup002.ets | 36 + .../UIAttributeFontInterfacePopup003.ets | 62 ++ .../UIAttributeFontInterfacePopup004.ets | 62 ++ .../UIAttributeFontInterfacePopup005.ets | 62 ++ .../UIAttributeFontInterfacePopup006.ets | 62 ++ .../UIAttributeFontInterfacePopup007.ets | 130 ++++ .../UIAttributeFontInterfaceSlider001.ets | 49 ++ .../UIAttributeFontInterfaceSlider002.ets | 39 + .../UIAttributeFontInterfaceSlider003.ets | 48 ++ .../UIAttributeFontInterfaceSlider004.ets | 30 + .../UIAttributeFontInterfaceSlider005.ets | 48 ++ .../UIAttributeFontInterfaceSlider006.ets | 48 ++ .../UIAttributeFontInterfaceSlider007.ets | 48 ++ .../UIAttributeFontInterfaceSlider0180.ets | 78 ++ .../UIAttributeFontInterfaceText001.ets | 35 + .../UIAttributeFontInterfaceText002.ets | 25 + .../UIAttributeFontInterfaceText003.ets | 35 + .../UIAttributeFontInterfaceText004.ets | 58 ++ .../UIAttributeFontInterfaceText005.ets | 35 + .../UIAttributeFontInterfaceText0140.ets | 28 + .../UIAttributeFontInterfaceText0200.ets | 28 + .../UIAttributeFontInterfaceVideo001.ets | 67 ++ .../UIAttributeFontInterfaceVideo002.ets | 67 ++ .../UIAttributeFontInterfaceVideo003.ets | 43 ++ .../UIAttributeFontInterfaceVideo004.ets | 68 ++ .../UIAttributeFontInterfaceVideo005.ets | 68 ++ .../UIAttributeFontInterfaceVideo006.ets | 68 ++ .../UIAttributeFontInterfaceVideo007.ets | 104 +++ ...BoxActionsheetInterfaceReplacement0230.ets | 53 ++ ...BoxActionsheetInterfaceReplacement0270.ets | 42 ++ ...BoxActionsheetInterfaceReplacement0280.ets | 48 ++ ...BoxActionsheetInterfaceReplacement0290.ets | 42 ++ ...BoxActionsheetInterfaceReplacement0300.ets | 99 +++ ...BoxActionsheetInterfaceReplacement0310.ets | 43 ++ ...BoxActionsheetInterfaceReplacement0320.ets | 43 ++ ...BoxAlertDialogInterfaceReplacement0130.ets | 40 + ...BoxAlertDialogInterfaceReplacement0140.ets | 51 ++ ...BoxAlertDialogInterfaceReplacement0230.ets | 51 ++ ...BoxAlertDialogInterfaceReplacement0240.ets | 51 ++ ...BoxAlertDialogInterfaceReplacement0270.ets | 54 ++ ...BoxAlertDialogInterfaceReplacement0280.ets | 54 ++ ...BoxAlertDialogInterfaceReplacement0370.ets | 51 ++ ...BoxAlertDialogInterfaceReplacement0390.ets | 50 ++ ...BoxAlertDialogInterfaceReplacement0410.ets | 34 + ...BoxAlertDialogInterfaceReplacement0560.ets | 44 ++ ...BoxAlertDialogInterfaceReplacement0570.ets | 42 ++ ...BoxAlertDialogInterfaceReplacement0690.ets | 41 + ...BoxAlertDialogInterfaceReplacement0780.ets | 45 ++ ...BoxAlertDialogInterfaceReplacement0800.ets | 45 ++ ...oxCalendarPickerFeatureReplacement0010.ets | 37 + ...oxCalendarPickerFeatureReplacement0020.ets | 34 + ...oxCalendarPickerFeatureReplacement0030.ets | 34 + ...oxCalendarPickerFeatureReplacement0040.ets | 34 + ...boxMenuStyleEnhancementReplacement0290.ets | 64 ++ ...boxMenuStyleEnhancementReplacement0300.ets | 44 ++ ...boxMenuStyleEnhancementReplacement0310.ets | 49 ++ ...boxMenuStyleEnhancementReplacement0350.ets | 49 ++ ...boxMenuStyleEnhancementReplacement0360.ets | 49 ++ ...boxMenuStyleEnhancementReplacement0370.ets | 49 ++ ...boxMenuStyleEnhancementReplacement0380.ets | 49 ++ ...boxMenuStyleEnhancementReplacement0390.ets | 49 ++ ...boxMenuStyleEnhancementReplacement0400.ets | 49 ++ ...boxMenuStyleEnhancementReplacement0410.ets | 49 ++ ...boxMenuStyleEnhancementReplacement0420.ets | 46 ++ ...boxMenuStyleEnhancementReplacement0430.ets | 46 ++ ...boxMenuStyleEnhancementReplacement0440.ets | 49 ++ ...boxMenuStyleEnhancementReplacement0530.ets | 43 ++ ...boxMenuStyleEnhancementReplacement0610.ets | 49 ++ ...boxMenuStyleEnhancementReplacement0620.ets | 49 ++ ...boxMenuStyleEnhancementReplacement0630.ets | 49 ++ ...boxMenuStyleEnhancementReplacement0640.ets | 49 ++ ...boxMenuStyleEnhancementReplacement0650.ets | 46 ++ ...boxMenuStyleEnhancementReplacement0670.ets | 49 ++ ...boxMenuStyleEnhancementReplacement0680.ets | 46 ++ ...boxMenuStyleEnhancementReplacement1030.ets | 71 ++ ...ComponentUISupportColorReplacement0570.ets | 40 + ...ComponentUISupportColorReplacement0580.ets | 40 + ...ComponentUISupportColorReplacement0590.ets | 40 + ...ComponentUISupportColorReplacement0600.ets | 40 + ...ComponentUISupportColorReplacement0610.ets | 34 + ...ComponentUISupportColorReplacement0620.ets | 34 + ...ComponentUISupportColorReplacement0630.ets | 34 + ...omponmentCanvasModifierReplacement1240.ets | 41 + .../UIAlertDialogInterfaceReplacement0420.ets | 63 ++ ...oxCalendarPickerFeatureReplacement0050.ets | 37 + ...ialogSpeciFicationsHandReplacement0060.ets | 38 + ...pportCustomIzationStyleReplacement0830.ets | 35 + .../UIRenderComComponent0020.ets | 241 ++++++ .../UIWebDrawPipeline0010.ets | 42 ++ .../UIWebDrawPipeline0050.ets | 259 +++++++ .../resources/base/profile/test_pages.json | 169 ++++- 254 files changed, 22574 insertions(+), 1 deletion(-) create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/DFXDrawTest/DFXDraw.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/DFXScrollEventObserverTest/DFXScrollEventObserver.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/SubAceStatusManagerDataDottingTest/SubAceStatusManagerDataDotting.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAnimationCustomTransitionInterfaceTest/UIAnimationCustomTransitionInterface.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAnimationParticleOptionTest/UIAnimationParticleOption.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAnimationParticleSpinTest/UIAnimationParticleSpin.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton001.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton002.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton003.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton004.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton0190.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton0310.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton0320.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas001.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas002.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas003.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas004.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas005.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas006.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas007.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle001.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle002.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle003.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle004.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle005.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle0210.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle0270.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog001.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog002.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog003.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog004.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog005.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog006.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog007.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog0330.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceDarkModeTest/UIAttributeFontInterfaceDarkMode001.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage001.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage002.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage003.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage004.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage005.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage006.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage0220.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu001.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu002.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu003.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu004.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu005.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu006.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu007.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup001.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup002.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup003.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup004.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup005.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup006.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup007.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider001.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider002.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider003.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider004.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider005.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider006.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider007.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider0180.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText001.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText002.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText003.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText004.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText005.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText0140.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText0200.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo001.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo002.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo003.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo004.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo005.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo006.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo007.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIComponmentCanvasModifierReplacementTest/UIComponmentCanvasModifierReplacement001.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIPopuBoxAlertDialogCalendarPickerReplacementTest/UIPopuBoxAlertDialogCalendarPickerReplacement001.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIPopuBoxSupportCustomIzationStyleReplacementTest/UIPopuBoxSupportCustomIzationStyleReplacement001.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIRenderComComponentTest/UIRenderComComponent.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIWebDrawPipelineTest/UIWebDrawPipeline.test.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXDraw/DFXDraw0010.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0010.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0020.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0030.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0040.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0050.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0060.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0090.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0100.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0110.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0140.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/WaterFlowDataSource.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/SubAceStatusManagerDataDotting/SubAceStatusManagerDataDotting0010.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationCustomTransitionInterface/UIAnimationCustomTransitionInterface0050.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0020.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0040.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0060.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0090.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0110.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0130.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0170.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0180.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0190.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0200.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0230.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleSpin/UIAnimationParticleSpin0090.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton001.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton002.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton003.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton004.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton0190.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton0310.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton0320.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas001.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas002.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas003.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas004.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas005.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas006.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas007.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle001.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle002.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle003.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle004.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle005.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle0210.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle0270.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog001.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog002.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog003.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog004.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog005.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog006.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog007.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog0330.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceDarkMode/UIAttributeFontInterfaceDarkMode0040.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceDarkMode/UIAttributeFontInterfaceDarkMode0050.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage001.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage002.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage003.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage004.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage005.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage006.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage0220.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu001.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu002.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu003.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu004.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu005.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu006.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu007.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup001.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup002.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup003.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup004.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup005.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup006.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup007.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider001.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider002.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider003.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider004.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider005.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider006.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider007.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider0180.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText001.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText002.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText003.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText004.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText005.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText0140.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText0200.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo001.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo002.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo003.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo004.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo005.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo006.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo007.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0230.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0270.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0280.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0290.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0300.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0310.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0320.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0130.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0140.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0230.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0240.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0270.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0280.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0370.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0390.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0410.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0560.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0570.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0690.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0780.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0800.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement0010.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement0020.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement0030.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement0040.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0290.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0300.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0310.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0350.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0360.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0370.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0380.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0390.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0400.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0410.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0420.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0430.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0440.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0530.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0610.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0620.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0630.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0640.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0650.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0670.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0680.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement1030.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0570.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0580.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0590.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0600.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0610.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0620.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0630.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponmentCanvasModifierReplacement/UIComponmentCanvasModifierReplacement1240.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIPopuBoxAlertDialogCalendarPickerReplacement/UIAlertDialogInterfaceReplacement0420.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIPopuBoxAlertDialogCalendarPickerReplacement/UIPopuBoxCalendarPickerFeatureReplacement0050.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIPopuBoxSupportCustomIzationStyleReplacement/UIDialogSpeciFicationsHandReplacement0060.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIPopuBoxSupportCustomIzationStyleReplacement/UIPopuBoxSupportCustomIzationStyleReplacement0830.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIRenderComComponent/UIRenderComComponent0020.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIWebDrawPipeline/UIWebDrawPipeline0010.ets create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIWebDrawPipeline/UIWebDrawPipeline0050.ets diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/DFXDrawTest/DFXDraw.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/DFXDrawTest/DFXDraw.test.ets new file mode 100755 index 00000000..1d437fe7 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/DFXDrawTest/DFXDraw.test.ets @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function DFXDraw() { + + describe('DFXDraw', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_DRAW_0010_1 + * @tc.name SUB_ACE_DFX_DRAW_0010_1 + * @tc.desc UIObserver + */ + it('SUB_ACE_DFX_DRAW_0010_1', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_DRAW_0010_1 start.`); + Settings.createWindow("testability/pages/DFXDraw/DFXDraw0010"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_DFX_DRAW_0010_1 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_DRAW_0010_2 + * @tc.name SUB_ACE_DFX_DRAW_0010_2 + * @tc.desc UIObserver + */ + it('SUB_ACE_DFX_DRAW_0010_2', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_DRAW_0010_2 start.`); + Settings.createWindow("testability/pages/DFXDraw/DFXDraw0010"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let btn1 = await driver.findComponent(ON.id('DFXDraw0010_btn1')); + await Utils.sleep(500); + await btn1.click(); + await Utils.sleep(500); + await btn1.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_DFX_DRAW_0010_2 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_DRAW_0010_3 + * @tc.name SUB_ACE_DFX_DRAW_0010_3 + * @tc.desc UIObserver + */ + it('SUB_ACE_DFX_DRAW_0010_3', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_DRAW_0010_3 start.`); + Settings.createWindow("testability/pages/DFXDraw/DFXDraw0010"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let btn1 = await driver.findComponent(ON.id('DFXDraw0010_btn1')); + let btn2 = await driver.findComponent(ON.id('DFXDraw0010_btn2')); + await Utils.sleep(1000); + await btn2.click(); + await Utils.sleep(1000); + await btn1.click(); + await Utils.sleep(1000); + await btn1.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_DFX_DRAW_0010_3 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_DRAW_0010_4 + * @tc.name SUB_ACE_DFX_DRAW_0010_4 + * @tc.desc UIObserver + */ + it('SUB_ACE_DFX_DRAW_0010_4', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_DRAW_0010_4 start.`); + Settings.createWindow("testability/pages/DFXDraw/DFXDraw0010"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let btn1 = await driver.findComponent(ON.id('DFXDraw0010_btn1')); + let btn3 = await driver.findComponent(ON.id('DFXDraw0010_btn3')); + await Utils.sleep(1000); + await btn3.click(); + await Utils.sleep(1000); + await btn1.click(); + await Utils.sleep(1000); + await btn1.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_DFX_DRAW_0010_4 finish.`); + done(); + }) + }) +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/DFXScrollEventObserverTest/DFXScrollEventObserver.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/DFXScrollEventObserverTest/DFXScrollEventObserver.test.ets new file mode 100755 index 00000000..b0b8570b --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/DFXScrollEventObserverTest/DFXScrollEventObserver.test.ets @@ -0,0 +1,711 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function DFXScrollEventObserver() { + + describe('DFXScrollEventObserver', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_ScrollEventObserver_0010 + * @tc.name SUB_ACE_DFX_ScrollEventObserver_0010 + * @tc.desc Scroll + */ + it('SUB_ACE_DFX_ScrollEventObserver_0010', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0010 start.`); + Settings.createWindow("testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0010"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let scroll = await driver.findComponent(ON.type('Scroll')); + await Utils.sleep(500); + let point = await scroll.getBoundsCenter(); + await Utils.sleep(1000); + await driver.mouseScroll(point, true, 2); + await Utils.sleep(1000); + let scrollBtn = await driver.findComponent(ON.id('ScrollEventObserver0010_btn1')); + await Utils.sleep(500); + await scrollBtn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await driver.click(300, 600); + await Utils.sleep(1000); + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0010 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_ScrollEventObserver_0020 + * @tc.name SUB_ACE_DFX_ScrollEventObserver_0020 + * @tc.desc Scroll + */ + it('SUB_ACE_DFX_ScrollEventObserver_0020', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0020 start.`); + Settings.createWindow("testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0020"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let scroll = await driver.findComponent(ON.id('scroll_btn')); + await Utils.sleep(500); + await scroll.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0020 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_ScrollEventObserver_0030_1 + * @tc.name SUB_ACE_DFX_ScrollEventObserver_0030_1 + * @tc.desc Scroll + */ + it('SUB_ACE_DFX_ScrollEventObserver_0030_1', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0030_1 start.`); + Settings.createWindow("testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0030"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let scroll = await driver.findComponent(ON.id('ScrollEventObserver0030_btn2')); + await Utils.sleep(1000); + let grid = await driver.findComponent(ON.type('Grid')); + await Utils.sleep(500); + let point = await grid.getBoundsCenter(); + await Utils.sleep(1000); + await driver.mouseScroll(point, true, 2); + await Utils.sleep(1000); + await scroll.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await driver.click(300, 600); + await Utils.sleep(1000); + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0030_1 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_ScrollEventObserver_0030_2 + * @tc.name SUB_ACE_DFX_ScrollEventObserver_0030_2 + * @tc.desc Scroll + */ + it('SUB_ACE_DFX_ScrollEventObserver_0030_2', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0030_2 start.`); + Settings.createWindow("testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0030"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let obserBtn = await driver.findComponent(ON.id('ScrollEventObserver0030_btn1')); + let scroll = await driver.findComponent(ON.id('ScrollEventObserver0030_btn2')); + await Utils.sleep(1000); + await obserBtn.click(); + await Utils.sleep(1000); + let grid = await driver.findComponent(ON.type('Grid')); + await Utils.sleep(500); + let point = await grid.getBoundsCenter(); + await Utils.sleep(1000); + await driver.mouseScroll(point, true, 2); + await Utils.sleep(1000); + await scroll.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await driver.click(300, 600); + await Utils.sleep(1000); + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0030_2 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_ScrollEventObserver_0040_1 + * @tc.name SUB_ACE_DFX_ScrollEventObserver_0040_1 + * @tc.desc Scroll + */ + it('SUB_ACE_DFX_ScrollEventObserver_0040_1', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0040_1 start.`); + Settings.createWindow("testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0040"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let list = await driver.findComponent(ON.type('List')); + await Utils.sleep(500); + let point = await list.getBoundsCenter(); + await Utils.sleep(1000); + await driver.mouseScroll(point, true, 2); + await Utils.sleep(1000); + let scroll = await driver.findComponent(ON.id('ScrollEventObserver0040_btn2')); + await Utils.sleep(1000); + await scroll.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await driver.click(300, 600); + await Utils.sleep(1000); + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0040_1 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_ScrollEventObserver_0040_2 + * @tc.name SUB_ACE_DFX_ScrollEventObserver_0040_2 + * @tc.desc Scroll + */ + it('SUB_ACE_DFX_ScrollEventObserver_0040_2', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0040_2 start.`); + Settings.createWindow("testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0040"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let obserBtn = await driver.findComponent(ON.id('ScrollEventObserver0040_btn1')); + await Utils.sleep(1000); + await obserBtn.click(); + await Utils.sleep(1000); + let list = await driver.findComponent(ON.type('List')); + await Utils.sleep(500); + let point = await list.getBoundsCenter(); + await Utils.sleep(1000); + await driver.mouseScroll(point, true, 2); + await Utils.sleep(1000); + let scroll = await driver.findComponent(ON.id('ScrollEventObserver0040_btn2')); + await Utils.sleep(1000); + await scroll.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await driver.click(300, 600); + await Utils.sleep(1000); + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0040_2 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_ScrollEventObserver_0050_1 + * @tc.name SUB_ACE_DFX_ScrollEventObserver_0050_1 + * @tc.desc Scroll + */ + it('SUB_ACE_DFX_ScrollEventObserver_0050_1', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0050_1 start.`); + Settings.createWindow("testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0050"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let scroll = await driver.findComponent(ON.type('Scroll')); + await Utils.sleep(500); + let point = await scroll.getBoundsCenter(); + await Utils.sleep(1000); + await driver.mouseScroll(point, true, 2); + await Utils.sleep(1000); + let scrollBtn = await driver.findComponent(ON.id('ScrollEventObserver0050_btn2')); + await Utils.sleep(1000); + await scrollBtn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await driver.click(300, 600); + await Utils.sleep(1000); + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0050_1 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_ScrollEventObserver_0050_2 + * @tc.name SUB_ACE_DFX_ScrollEventObserver_0050_2 + * @tc.desc Scroll + */ + it('SUB_ACE_DFX_ScrollEventObserver_0050_2', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0050_2 start.`); + Settings.createWindow("testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0050"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let obserBtn = await driver.findComponent(ON.id('ScrollEventObserver0050_btn1')); + await Utils.sleep(1000); + await obserBtn.click(); + await Utils.sleep(1000); + let scroll = await driver.findComponent(ON.type('Scroll')); + await Utils.sleep(500); + let point = await scroll.getBoundsCenter(); + await Utils.sleep(1000); + await driver.mouseScroll(point, true, 2); + await Utils.sleep(1000); + let scrollBtn = await driver.findComponent(ON.id('ScrollEventObserver0050_btn2')); + await Utils.sleep(1000); + await scrollBtn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await driver.click(300, 600); + await Utils.sleep(1000); + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0050_2 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_ScrollEventObserver_0060_1 + * @tc.name SUB_ACE_DFX_ScrollEventObserver_0060_1 + * @tc.desc Scroll + */ + it('SUB_ACE_DFX_ScrollEventObserver_0060_1', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0060_1 start.`); + Settings.createWindow("testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0060"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let waterFlow = await driver.findComponent(ON.type('WaterFlow')); + await Utils.sleep(500); + let point = await waterFlow.getBoundsCenter(); + await Utils.sleep(1000); + await driver.mouseScroll(point, true, 2); + await Utils.sleep(1000); + let scrollBtn = await driver.findComponent(ON.id('ScrollEventObserver0060_btn2')); + await Utils.sleep(1000); + await scrollBtn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await driver.click(300, 600); + await Utils.sleep(1000); + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0060_1 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_ScrollEventObserver_0060_2 + * @tc.name SUB_ACE_DFX_ScrollEventObserver_0060_2 + * @tc.desc Scroll + */ + it('SUB_ACE_DFX_ScrollEventObserver_0060_2', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0060_2 start.`); + Settings.createWindow("testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0060"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let obserBtn = await driver.findComponent(ON.id('ScrollEventObserver0060_btn1')); + await Utils.sleep(1000); + await obserBtn.click(); + await Utils.sleep(1000); + let waterFlow = await driver.findComponent(ON.type('WaterFlow')); + await Utils.sleep(500); + let point = await waterFlow.getBoundsCenter(); + await Utils.sleep(1000); + await driver.mouseScroll(point, true, 2); + await Utils.sleep(1000); + let scrollBtn = await driver.findComponent(ON.id('ScrollEventObserver0060_btn2')); + await Utils.sleep(1000); + await scrollBtn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await driver.click(300, 600); + await Utils.sleep(1000); + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0060_2 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_ScrollEventObserver_0070 + * @tc.name SUB_ACE_DFX_ScrollEventObserver_0070 + * @tc.desc Scroll + */ + it('SUB_ACE_DFX_ScrollEventObserver_0070', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0070 start.`); + Settings.createWindow("testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0040"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let list = await driver.findComponent(ON.type('List')); + await Utils.sleep(500); + let point = await list.getBoundsCenter(); + await Utils.sleep(1000); + await driver.mouseScroll(point, true, 2); + await Utils.sleep(1000); + let scroll = await driver.findComponent(ON.id('ScrollEventObserver0040_btn2')); + await Utils.sleep(1000); + await scroll.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await driver.click(300, 600); + await Utils.sleep(1000); + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0070 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_ScrollEventObserver_0080 + * @tc.name SUB_ACE_DFX_ScrollEventObserver_0080 + * @tc.desc Scroll + */ + it('SUB_ACE_DFX_ScrollEventObserver_0080', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0080 start.`); + Settings.createWindow("testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0050"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let scroll = await driver.findComponent(ON.type('Scroll')); + await Utils.sleep(500); + let point = await scroll.getBoundsCenter(); + await Utils.sleep(1000); + await driver.mouseScroll(point, true, 2); + await Utils.sleep(1000); + let scrollBtn = await driver.findComponent(ON.id('ScrollEventObserver0050_btn2')); + await Utils.sleep(1000); + await scrollBtn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await driver.click(300, 600); + await Utils.sleep(1000); + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0080 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_ScrollEventObserver_0090 + * @tc.name SUB_ACE_DFX_ScrollEventObserver_0090 + * @tc.desc Scroll + */ + it('SUB_ACE_DFX_ScrollEventObserver_0090', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0090 start.`); + Settings.createWindow("testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0090"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let list = await driver.findComponent(ON.type('List')); + await Utils.sleep(500); + let point = await list.getBoundsCenter(); + await Utils.sleep(1000); + await driver.drag(point.x, point.y, point.x * 2, point.y); + await Utils.sleep(1000); + let scrollBtn = await driver.findComponent(ON.id('ScrollEventObserver0090_btn2')); + await Utils.sleep(1000); + await scrollBtn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0090 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_ScrollEventObserver_0100 + * @tc.name SUB_ACE_DFX_ScrollEventObserver_0100 + * @tc.desc Scroll + */ + it('SUB_ACE_DFX_ScrollEventObserver_0100', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0100 start.`); + Settings.createWindow("testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0100"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let list = await driver.findComponent(ON.type('List')); + await Utils.sleep(500); + let point = await list.getBoundsCenter(); + await Utils.sleep(1000); + await driver.mouseScroll(point, true, 2); + await Utils.sleep(1000); + let scroll = await driver.findComponent(ON.id('ScrollEventObserver0100_btn2')); + await Utils.sleep(1000); + await scroll.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await driver.click(300, 600); + await Utils.sleep(1000); + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0100 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_ScrollEventObserver_0110 + * @tc.name SUB_ACE_DFX_ScrollEventObserver_0110 + * @tc.desc Scroll + */ + it('SUB_ACE_DFX_ScrollEventObserver_0110', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0110 start.`); + Settings.createWindow("testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0110"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let obserBtn = await driver.findComponent(ON.id('ScrollEventObserver0110_btn1')); + await Utils.sleep(1000); + await obserBtn.click(); + await Utils.sleep(1000); + let waterFlow = await driver.findComponent(ON.type('WaterFlow')); + await Utils.sleep(500); + let point = await waterFlow.getBoundsCenter(); + await Utils.sleep(1000); + await driver.mouseScroll(point, true, 2); + await Utils.sleep(1000); + let scrollBtn = await driver.findComponent(ON.id('ScrollEventObserver0110_btn2')); + await Utils.sleep(1000); + await scrollBtn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await driver.click(300, 600); + await Utils.sleep(1000); + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0110 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_ScrollEventObserver_0120 + * @tc.name SUB_ACE_DFX_ScrollEventObserver_0120 + * @tc.desc Scroll + */ + it('SUB_ACE_DFX_ScrollEventObserver_0120', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0120 start.`); + Settings.createWindow("testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0030"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let grid = await driver.findComponent(ON.type('Grid')); + await Utils.sleep(500); + let point = await grid.getBoundsCenter(); + await Utils.sleep(1000); + await driver.mouseScroll(point, true, 2); + await Utils.sleep(1000); + let scroll = await driver.findComponent(ON.id('ScrollEventObserver0030_btn2')); + await Utils.sleep(1000); + await scroll.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await driver.click(300, 600); + await Utils.sleep(1000); + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0120 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_ScrollEventObserver_0130 + * @tc.name SUB_ACE_DFX_ScrollEventObserver_0130 + * @tc.desc Scroll + */ + it('SUB_ACE_DFX_ScrollEventObserver_0130', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0130 start.`); + Settings.createWindow("testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0050"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let scroll = await driver.findComponent(ON.type('Scroll')); + await Utils.sleep(500); + let point = await scroll.getBoundsCenter(); + await Utils.sleep(1000); + await driver.mouseScroll(point, true, 2); + await Utils.sleep(1000); + let scrollBtn = await driver.findComponent(ON.id('ScrollEventObserver0050_btn2')); + await Utils.sleep(1000); + await scrollBtn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await driver.click(300, 600); + await Utils.sleep(1000); + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0130 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_ScrollEventObserver_0140 + * @tc.name SUB_ACE_DFX_ScrollEventObserver_0140 + * @tc.desc Scroll + */ + it('SUB_ACE_DFX_ScrollEventObserver_0140', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0140 start.`); + Settings.createWindow("testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0010"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let pageBtn = await driver.findComponent(ON.id('ScrollEventObserver0010_btn2')); + await Utils.sleep(1000); + await pageBtn.click(); + await Utils.sleep(1000); + let scrollBtn = await driver.findComponent(ON.id('ScrollEventObserver0010_btn1')); + await Utils.sleep(1000); + await scrollBtn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0140 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_ScrollEventObserver_0150 + * @tc.name SUB_ACE_DFX_ScrollEventObserver_0150 + * @tc.desc Scroll + */ + it('SUB_ACE_DFX_ScrollEventObserver_0150', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0150 start.`); + Settings.createWindow("testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0010"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let scroll = await driver.findComponent(ON.type('Scroll')); + await Utils.sleep(500); + let point = await scroll.getBoundsCenter(); + await Utils.sleep(1000); + await driver.swipe(point.x, point.y * 2, point.x, point.y); + await Utils.sleep(1000); + let scrollBtn = await driver.findComponent(ON.id('ScrollEventObserver0010_btn1')); + await Utils.sleep(500); + await scrollBtn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0150 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_ScrollEventObserver_0160 + * @tc.name SUB_ACE_DFX_ScrollEventObserver_0160 + * @tc.desc Scroll + */ + it('SUB_ACE_DFX_ScrollEventObserver_0160', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0160 start.`); + Settings.createWindow("testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0010"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let scroll = await driver.findComponent(ON.type('Scroll')); + let scrollBtn = await driver.findComponent(ON.id('ScrollEventObserver0010_btn1')); + let scrollBtn2 = await driver.findComponent(ON.id('ScrollEventObserver0010_btn3')); + await Utils.sleep(1000); + await scrollBtn2.click(); + await Utils.sleep(1000); + await scrollBtn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0160 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_ScrollEventObserver_0170 + * @tc.name SUB_ACE_DFX_ScrollEventObserver_0170 + * @tc.desc Scroll + */ + it('SUB_ACE_DFX_ScrollEventObserver_0170', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0170 start.`); + Settings.createWindow("testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0010"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let scroll = await driver.findComponent(ON.type('Scroll')); + let scrollBtn = await driver.findComponent(ON.id('ScrollEventObserver0010_btn1')); + let scrollBtn2 = await driver.findComponent(ON.id('ScrollEventObserver0010_btn4')); + await Utils.sleep(1000); + await scrollBtn2.click(); + await Utils.sleep(1000); + await scrollBtn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0170 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_ScrollEventObserver_0180_1 + * @tc.name SUB_ACE_DFX_ScrollEventObserver_0180_1 + * @tc.desc Scroll + */ + it('SUB_ACE_DFX_ScrollEventObserver_0180_1', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0180_1 start.`); + Settings.createWindow("testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0010"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let scroll = await driver.findComponent(ON.type('Scroll')); + let scrollBtn = await driver.findComponent(ON.id('ScrollEventObserver0010_btn1')); + let scrollBtn2 = await driver.findComponent(ON.id('ScrollEventObserver0010_btn5')); + await Utils.sleep(1000); + await scrollBtn.click(); + await Utils.sleep(1000); + await scrollBtn2.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0180_1 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_ScrollEventObserver_0180_2 + * @tc.name SUB_ACE_DFX_ScrollEventObserver_0180_2 + * @tc.desc Scroll + */ + it('SUB_ACE_DFX_ScrollEventObserver_0180_2', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0180_2 start.`); + Settings.createWindow("testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0010"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let scroll = await driver.findComponent(ON.type('Scroll')); + let scrollBtn = await driver.findComponent(ON.id('ScrollEventObserver0010_btn1')); + await Utils.sleep(1000); + await scrollBtn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0180_2 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_DFX_ScrollEventObserver_0190 + * @tc.name SUB_ACE_DFX_ScrollEventObserver_0190 + * @tc.desc Scroll + */ + it('SUB_ACE_DFX_ScrollEventObserver_0190', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0190 start.`); + Settings.createWindow("testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0010"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let scroll = await driver.findComponent(ON.type('Scroll')); + let scrollBtn = await driver.findComponent(ON.id('ScrollEventObserver0010_btn1')); + let scrollBtn2 = await driver.findComponent(ON.id('ScrollEventObserver0010_btn6')); + await Utils.sleep(1000); + await scrollBtn2.click(); + await Utils.sleep(1000); + await scrollBtn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_DFX_ScrollEventObserver_0190 finish.`); + done(); + }) + }) +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/List.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/List.test.ets index 0860e123..a02e98b6 100644 --- a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/List.test.ets +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/List.test.ets @@ -149,6 +149,167 @@ import UIComponentPopupBoxToastStyleInterface001 from './UIComponentPopupBoxToastStyleInterfaceTest/UIComponentPopupBoxToastStyleInterface001.test'; import UIComponentPopupBoxFullDialogInterface001 from './UIComponentPopupBoxFullDialogInterfaceTest/UIComponentPopupBoxFullDialogInterface001.test'; + +import UIAttributeFontInterfaceButton001 + from './UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton001.test'; +import UIAttributeFontInterfaceButton002 + from './UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton002.test'; +import UIAttributeFontInterfaceButton003 + from './UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton003.test'; +import UIAttributeFontInterfaceCanvas001 + from './UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas001.test'; +import UIAttributeFontInterfaceCanvas002 + from './UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas002.test'; +import UIAttributeFontInterfaceCanvas003 + from './UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas003.test'; +import UIAttributeFontInterfaceCanvas004 + from './UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas004.test'; +import UIAttributeFontInterfaceCanvas005 + from './UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas005.test'; +import UIAttributeFontInterfaceCanvas006 + from './UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas006.test'; +import UIAttributeFontInterfaceCircle001 + from './UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle001.test'; +import UIAttributeFontInterfaceCircle002 + from './UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle002.test'; +import UIAttributeFontInterfaceCircle003 + from './UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle003.test'; +import UIAttributeFontInterfaceCircle004 + from './UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle004.test'; +import UIAttributeFontInterfaceCircle005 + from './UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle005.test'; +import UIAttributeFontInterfaceCustomDialog001 + from './UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog001.test'; +import UIAttributeFontInterfaceCustomDialog002 + from './UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog002.test'; +import UIAttributeFontInterfaceCustomDialog003 + from './UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog003.test'; +import UIAttributeFontInterfaceCustomDialog004 + from './UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog004.test'; +import UIAttributeFontInterfaceCustomDialog005 + from './UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog005.test'; +import UIAttributeFontInterfaceCustomDialog006 + from './UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog006.test'; +import UIAttributeFontInterfaceCustomDialog007 + from './UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog007.test'; +import UIAttributeFontInterfaceImage001 + from './UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage001.test'; +import UIAttributeFontInterfaceImage002 + from './UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage002.test'; +import UIAttributeFontInterfaceImage003 + from './UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage003.test'; +import UIAttributeFontInterfaceImage004 + from './UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage004.test'; +import UIAttributeFontInterfaceImage005 + from './UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage005.test'; +import UIAttributeFontInterfaceImage006 + from './UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage006.test'; +import UIAttributeFontInterfaceMenu001 from './UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu001.test'; +import UIAttributeFontInterfaceMenu002 from './UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu002.test'; +import UIAttributeFontInterfaceMenu003 from './UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu003.test'; +import UIAttributeFontInterfaceMenu004 from './UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu004.test'; +import UIAttributeFontInterfaceMenu005 from './UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu005.test'; +import UIAttributeFontInterfaceMenu006 from './UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu006.test'; +import UIAttributeFontInterfaceMenu007 from './UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu007.test'; +import UIAttributeFontInterfacePopup001 + from './UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup001.test'; +import UIAttributeFontInterfacePopup002 + from './UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup002.test'; +import UIAttributeFontInterfacePopup003 + from './UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup003.test'; +import UIAttributeFontInterfacePopup004 + from './UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup004.test'; +import UIAttributeFontInterfacePopup005 + from './UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup005.test'; +import UIAttributeFontInterfacePopup006 + from './UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup006.test'; +import UIAttributeFontInterfacePopup007 + from './UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup007.test'; +import UIAttributeFontInterfaceSlider001 + from './UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider001.test'; +import UIAttributeFontInterfaceSlider002 + from './UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider002.test'; +import UIAttributeFontInterfaceSlider003 + from './UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider003.test'; +import UIAttributeFontInterfaceSlider004 + from './UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider004.test'; +import UIAttributeFontInterfaceSlider005 + from './UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider005.test'; +import UIAttributeFontInterfaceSlider006 + from './UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider006.test'; +import UIAttributeFontInterfaceSlider007 + from './UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider007.test'; +import UIAttributeFontInterfaceText001 from './UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText001.test'; +import UIAttributeFontInterfaceText002 from './UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText002.test'; +import UIAttributeFontInterfaceText003 from './UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText003.test'; +import UIAttributeFontInterfaceText004 from './UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText004.test'; +import UIAttributeFontInterfaceText005 from './UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText005.test'; +import UIAttributeFontInterfaceVideo001 + from './UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo001.test'; +import UIAttributeFontInterfaceVideo002 + from './UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo002.test'; +import UIAttributeFontInterfaceVideo003 + from './UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo003.test'; +import UIAttributeFontInterfaceVideo004 + from './UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo004.test'; +import UIAttributeFontInterfaceVideo005 + from './UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo005.test'; +import UIAttributeFontInterfaceVideo006 + from './UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo006.test'; +import UIAttributeFontInterfaceVideo007 + from './UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo007.test'; +import UIComponentPopupBoxActionsheetInterfaceReplacement + from './UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement.test'; +import UIComponentPopupboxMenuStyleEnhancementReplacement + from './UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement.test'; +import UIComponentUISupportColorReplacement + from './UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement.test'; +import UIWebDrawPipeline from './UIWebDrawPipelineTest/UIWebDrawPipeline.test'; +import UIRenderComComponent from './UIRenderComComponentTest/UIRenderComComponent.test'; +import UIComponentPopupBoxCalendarPickerFeatureReplacement + from './UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement.test'; +import UIComponentPopupBoxAlertDialogInterfaceReplacement + from './UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement.test'; + +import SubAceStatusManagerDataDotting from './SubAceStatusManagerDataDottingTest/SubAceStatusManagerDataDotting.test'; +import UIAttributeFontInterfaceCircle0210 + from './UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle0210.test'; +import UIAttributeFontInterfaceImage0220 + from './UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage0220.test'; +import UIAttributeFontInterfaceSlider0180 + from './UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider0180.test'; +import UIAttributeFontInterfaceCustomDialog0330 + from './UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog0330.test'; +import UIAttributeFontInterfaceCircle0270 + from './UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle0270.test'; +import UIAttributeFontInterfaceCanvas007 + from './UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas007.test'; +import UIAttributeFontInterfaceButton004 + from './UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton004.test'; +import UIAttributeFontInterfaceButton0190 + from './UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton0190.test'; +import UIAttributeFontInterfaceButton0310 + from './UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton0310.test'; +import UIAttributeFontInterfaceButton0320 + from './UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton0320.test'; +import UIAttributeFontInterfaceText0140 + from './UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText0140.test'; +import UIAttributeFontInterfaceText0200 + from './UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText0200.test'; +import UIAttributeFontInterfaceDarkMode001 + from './UIAttributeFontInterfaceDarkModeTest/UIAttributeFontInterfaceDarkMode001.test'; +import UIPopuBoxSupportCustomIzationStyleReplacement001 + from './UIPopuBoxSupportCustomIzationStyleReplacementTest/UIPopuBoxSupportCustomIzationStyleReplacement001.test'; +import UIPopuBoxAlertDialogCalendarPickerReplacement001 + from './UIPopuBoxAlertDialogCalendarPickerReplacementTest/UIPopuBoxAlertDialogCalendarPickerReplacement001.test'; +import UIComponmentCanvasModifierReplacement001 + from './UIComponmentCanvasModifierReplacementTest/UIComponmentCanvasModifierReplacement001.test'; +import DFXScrollEventObserver from './DFXScrollEventObserverTest/DFXScrollEventObserver.test'; +import DFXDraw from './DFXDrawTest/DFXDraw.test'; +import UIAnimationCustomTransitionInterface + from './UIAnimationCustomTransitionInterfaceTest/UIAnimationCustomTransitionInterface.test'; +import UIAnimationParticleOption from './UIAnimationParticleOptionTest/UIAnimationParticleOption.test'; +import UIAnimationParticleSpin from './UIAnimationParticleSpinTest/UIAnimationParticleSpin.test'; export default function testsuite() { ComponentTextRicheditorFontfeatures(); @@ -239,6 +400,98 @@ export default function testsuite() { UIComponentPopupBoxAttribute(); UIComponentPopupBoxPromptToastSequence(); UIComponentPopupBoxSpecificationsPopup(); + + UIAttributeFontInterfaceButton001(); + UIAttributeFontInterfaceButton002(); + UIAttributeFontInterfaceButton003(); + UIAttributeFontInterfaceCanvas001(); + UIAttributeFontInterfaceCanvas002(); + UIAttributeFontInterfaceCanvas003(); + UIAttributeFontInterfaceCanvas004(); + UIAttributeFontInterfaceCanvas005(); + UIAttributeFontInterfaceCanvas006(); + UIAttributeFontInterfaceCircle001(); + UIAttributeFontInterfaceCircle002(); + UIAttributeFontInterfaceCircle003(); + UIAttributeFontInterfaceCircle004(); + UIAttributeFontInterfaceCircle005(); + UIAttributeFontInterfaceCustomDialog001(); + UIAttributeFontInterfaceCustomDialog002(); + UIAttributeFontInterfaceCustomDialog003(); + UIAttributeFontInterfaceCustomDialog004(); + UIAttributeFontInterfaceCustomDialog005(); + UIAttributeFontInterfaceCustomDialog006(); + UIAttributeFontInterfaceCustomDialog007(); + UIAttributeFontInterfaceImage001(); + UIAttributeFontInterfaceImage002(); + UIAttributeFontInterfaceImage003(); + UIAttributeFontInterfaceImage004(); + UIAttributeFontInterfaceImage005(); + UIAttributeFontInterfaceImage006(); + UIAttributeFontInterfaceMenu001(); + UIAttributeFontInterfaceMenu002(); + UIAttributeFontInterfaceMenu003(); + UIAttributeFontInterfaceMenu004(); + UIAttributeFontInterfaceMenu005(); + UIAttributeFontInterfaceMenu006(); + UIAttributeFontInterfaceMenu007(); + UIAttributeFontInterfacePopup001(); + UIAttributeFontInterfacePopup002(); + UIAttributeFontInterfacePopup003(); + UIAttributeFontInterfacePopup004(); + UIAttributeFontInterfacePopup005(); + UIAttributeFontInterfacePopup006(); + UIAttributeFontInterfacePopup007(); + UIAttributeFontInterfaceSlider001(); + UIAttributeFontInterfaceSlider002(); + UIAttributeFontInterfaceSlider003(); + UIAttributeFontInterfaceSlider004(); + UIAttributeFontInterfaceSlider005(); + UIAttributeFontInterfaceSlider006(); + UIAttributeFontInterfaceSlider007(); + UIAttributeFontInterfaceText001(); + UIAttributeFontInterfaceText002(); + UIAttributeFontInterfaceText003(); + UIAttributeFontInterfaceText004(); + UIAttributeFontInterfaceText005(); + UIAttributeFontInterfaceVideo001(); + UIAttributeFontInterfaceVideo002(); + UIAttributeFontInterfaceVideo003(); + UIAttributeFontInterfaceVideo004(); + UIAttributeFontInterfaceVideo005(); + UIAttributeFontInterfaceVideo006(); + UIAttributeFontInterfaceVideo007(); + SubAceStatusManagerDataDotting(); + + UIComponentPopupboxMenuStyleEnhancementReplacement(); + UIComponentUISupportColorReplacement(); + UIComponentPopupBoxActionsheetInterfaceReplacement(); + UIWebDrawPipeline(); + UIRenderComComponent(); + UIComponentPopupBoxCalendarPickerFeatureReplacement(); + UIComponentPopupBoxAlertDialogInterfaceReplacement(); + + UIAttributeFontInterfaceCircle0270(); + UIAttributeFontInterfaceButton004(); + UIAttributeFontInterfaceButton0190(); + UIAttributeFontInterfaceButton0310(); + UIAttributeFontInterfaceButton0320(); + UIAttributeFontInterfaceText0140(); + UIAttributeFontInterfaceText0200(); + UIAttributeFontInterfaceCanvas007(); + UIAttributeFontInterfaceCircle0210(); + UIAttributeFontInterfaceImage0220(); + UIAttributeFontInterfaceSlider0180(); + UIAttributeFontInterfaceCustomDialog0330(); + UIAttributeFontInterfaceDarkMode001(); + UIPopuBoxSupportCustomIzationStyleReplacement001(); + UIPopuBoxAlertDialogCalendarPickerReplacement001(); + UIComponmentCanvasModifierReplacement001(); + DFXScrollEventObserver(); + DFXDraw(); + UIAnimationCustomTransitionInterface(); + UIAnimationParticleOption(); + UIAnimationParticleSpin(); } diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/SubAceStatusManagerDataDottingTest/SubAceStatusManagerDataDotting.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/SubAceStatusManagerDataDottingTest/SubAceStatusManagerDataDotting.test.ets new file mode 100755 index 00000000..6133d016 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/SubAceStatusManagerDataDottingTest/SubAceStatusManagerDataDotting.test.ets @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0160: + * 验证CheckBoxGroup组件动态切换浅色模式-深色模式正常切换 + * + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function SubAceStatusManagerDataDotting0010() { + + describe('SubAceStatusManagerDataDotting0010', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + + /* + * @tc.number SUB_ACE_STATUSMANAGER_DATADOTTING_0010 + * @tc.name SUB_ACE_STATUSMANAGER_DATADOTTING_0010 + * @tc.desc List组件内嵌套多个可滑动图片 + */ + it('SUB_ACE_STATUSMANAGER_DATADOTTING_0010', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_STATUSMANAGER_DATADOTTING_0010 start.`); + Settings.createWindow("testability/pages/SubAceStatusManagerDataDotting/SubAceStatusManagerDataDotting0010"); + let driver: Driver = Driver.create() + await Utils.sleep(500); + let list: Component = await driver.findComponent(ON.id('list')) + await Utils.sleep(500); + let bounds = await list.getBounds() + await Utils.sleep(500); + await driver.swipe(bounds.right / 2, bounds.bottom * 0.75, bounds.right / 2, bounds.bottom * 0, 2000) + await Utils.sleep(1500) + windowSnap.snapShot(); + await Utils.sleep(1000); + Logger.info('TEST', `SUB_ACE_STATUSMANAGER_DATADOTTING_0010 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAnimationCustomTransitionInterfaceTest/UIAnimationCustomTransitionInterface.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAnimationCustomTransitionInterfaceTest/UIAnimationCustomTransitionInterface.test.ets new file mode 100755 index 00000000..20ed5c83 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAnimationCustomTransitionInterfaceTest/UIAnimationCustomTransitionInterface.test.ets @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAnimationCustomTransitionInterface() { + + describe('UIAnimationCustomTransitionInterface', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number SUB_ACE_UI_MOTION_ANIMATION_CUSTOMANIMATION_INTERFACE_0050 + * @tc.name SUB_ACE_UI_MOTION_ANIMATION_CUSTOMANIMATION_INTERFACE_0050 + * @tc.desc UIObserver + */ + it('SUB_ACE_UI_MOTION_ANIMATION_CUSTOMANIMATION_INTERFACE_0050', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_CUSTOMANIMATION_INTERFACE_0050 start.`); + Settings.createWindow("testability/pages/UIAnimationCustomTransitionInterface/UIAnimationCustomTransitionInterface0050"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_CUSTOMANIMATION_INTERFACE_0050 finish.`); + done(); + }) + }) +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAnimationParticleOptionTest/UIAnimationParticleOption.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAnimationParticleOptionTest/UIAnimationParticleOption.test.ets new file mode 100755 index 00000000..03aff3b0 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAnimationParticleOptionTest/UIAnimationParticleOption.test.ets @@ -0,0 +1,213 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAnimationParticleOption() { + + describe('UIAnimationParticleOption', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0020 + * @tc.name SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0020 + * @tc.desc + */ + it('SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0020', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0020 start.`); + Settings.createWindow("testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0020"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0020 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0040 + * @tc.name SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0040 + * @tc.desc + */ + it('SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0040', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0040 start.`); + Settings.createWindow("testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0040"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0040 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0060 + * @tc.name SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0060 + * @tc.desc + */ + it('SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0060', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0060 start.`); + Settings.createWindow("testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0060"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0060 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0090 + * @tc.name SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0090 + * @tc.desc + */ + it('SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0090', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0090 start.`); + Settings.createWindow("testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0090"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0090 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0110 + * @tc.name SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0110 + * @tc.desc + */ + it('SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0110', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0110 start.`); + Settings.createWindow("testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0110"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0110 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0130 + * @tc.name SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0130 + * @tc.desc + */ + it('SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0130', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0130 start.`); + Settings.createWindow("testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0130"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0130 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0170 + * @tc.name SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0170 + * @tc.desc + */ + it('SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0170', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0170 start.`); + Settings.createWindow("testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0170"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0170 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0180 + * @tc.name SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0180 + * @tc.desc + */ + it('SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0180', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0180 start.`); + Settings.createWindow("testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0180"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0180 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0190 + * @tc.name SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0190 + * @tc.desc + */ + it('SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0190', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0190 start.`); + Settings.createWindow("testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0190"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0190 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0200 + * @tc.name SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0200 + * @tc.desc + */ + it('SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0200', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0200 start.`); + Settings.createWindow("testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0200"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0200 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0230 + * @tc.name SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0230 + * @tc.desc + */ + it('SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0230', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0230 start.`); + Settings.createWindow("testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0230"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_0230 finish.`); + done(); + }) + }) +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAnimationParticleSpinTest/UIAnimationParticleSpin.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAnimationParticleSpinTest/UIAnimationParticleSpin.test.ets new file mode 100755 index 00000000..f02502ca --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAnimationParticleSpinTest/UIAnimationParticleSpin.test.ets @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAnimationParticleSpin() { + + describe('UIAnimationParticleSpin', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_SPIN_0090 + * @tc.name SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_SPIN_0090 + * @tc.desc UIObserver + */ + it('SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_SPIN_0090', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_SPIN_0090 start.`); + Settings.createWindow("testability/pages/UIAnimationParticleSpin/UIAnimationParticleSpin0090"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_MOTION_ANIMATION_PARTICLEOPTIONS_SPIN_0090 finish.`); + done(); + }) + }) +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton001.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton001.test.ets new file mode 100755 index 00000000..b1750977 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton001.test.ets @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceButton001() { + + describe('UIAttributeFontInterfaceButton001', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0070_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0070_1 + * @tc.desc colorMode test button + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0070_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0070_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton001"); + await Utils.sleep(500); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error:Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0070_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0070_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0070_2 + * @tc.desc colorMode test button + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0070_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0070_2 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton001"); + await Utils.sleep(500); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0070_2 finish.`); + done(); + }) + }) +} + diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton002.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton002.test.ets new file mode 100755 index 00000000..a7fc7174 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton002.test.ets @@ -0,0 +1,131 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceButton002() { + + describe('UIAttributeFontInterfaceButton002', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0550_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0550_1 + * @tc.desc colorMode test button + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0550_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0550_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton002"); + await Utils.sleep(500); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + let driver: Driver = Driver.create(); + let button1: Component = await driver.findComponent(ON.id('button_01')); + let button2: Component = await driver.findComponent(ON.id('button_02')); + let button3: Component = await driver.findComponent(ON.id('button_03')); + let button4: Component = await driver.findComponent(ON.id('button_04')); + await Utils.sleep(100); + await button1.click(); + await Utils.sleep(500); + await button2.click(); + await Utils.sleep(500); + await button3.click(); + await Utils.sleep(500); + await button4.click(); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0550_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0550_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0550_2 + * @tc.desc colorMode test button + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0550_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0550_2 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton002"); + await Utils.sleep(500); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + let driver: Driver = Driver.create(); + let button1: Component = await driver.findComponent(ON.id('button_01')); + let button2: Component = await driver.findComponent(ON.id('button_02')); + let button3: Component = await driver.findComponent(ON.id('button_03')); + let button4: Component = await driver.findComponent(ON.id('button_04')); + await Utils.sleep(100); + await button1.click(); + await Utils.sleep(500); + await button2.click(); + await Utils.sleep(500); + await button3.click(); + await Utils.sleep(500); + await button4.click(); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0550_2 finish.`); + done(); + }) + }) +} + diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton003.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton003.test.ets new file mode 100755 index 00000000..14bed62e --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton003.test.ets @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceButton003() { + + describe('UIAttributeFontInterfaceButton003', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0340_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0340_1 + * @tc.desc colorMode test button + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0340_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0340_1 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton003"); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0340_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0340_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0340_2 + * @tc.desc colorMode test button + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0340_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0340_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton003"); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0340_2 finish.`); + done(); + }) + }) +} + diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton004.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton004.test.ets new file mode 100755 index 00000000..e1a5e0f6 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton004.test.ets @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceButton004() { + + describe('UIAttributeFontInterfaceButton004', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0030_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0030_1 + * @tc.desc colorMode test button + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0030_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0030_1 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton004"); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0340_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0030_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0030_2 + * @tc.desc colorMode test button + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0030_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0030_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton004"); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0030_2 finish.`); + done(); + }) + }) +} + diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton0190.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton0190.test.ets new file mode 100755 index 00000000..14da6944 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton0190.test.ets @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceButton0190() { + + describe('UIAttributeFontInterfaceButton0190', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0190_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0190_1 + * @tc.desc colorMode test button + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0190_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0190_1 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton0190"); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0190_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0190_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0190_2 + * @tc.desc colorMode test button + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0190_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0190_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton0190"); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0190_2 finish.`); + done(); + }) + }) +} + diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton0310.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton0310.test.ets new file mode 100755 index 00000000..55032752 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton0310.test.ets @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceButton0310() { + + describe('UIAttributeFontInterfaceButton0310', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0310_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0310_1 + * @tc.desc colorMode test button + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0310_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0310_1 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton0310"); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0310_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0310_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0310_2 + * @tc.desc colorMode test button + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0310_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0310_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton0310"); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0310_2 finish.`); + done(); + }) + }) +} + diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton0320.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton0320.test.ets new file mode 100755 index 00000000..70ec6c9b --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceButtonTest/UIAttributeFontInterfaceButton0320.test.ets @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceButton0320() { + + describe('UIAttributeFontInterfaceButton0320', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0320_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0320_1 + * @tc.desc colorMode test button + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0320_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0320_1 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton0320"); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0320_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0320_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0320_2 + * @tc.desc colorMode test button + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0320_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0320_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton0320"); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0320_2 finish.`); + done(); + }) + }) +} + diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas001.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas001.test.ets new file mode 100755 index 00000000..8e119c9e --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas001.test.ets @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceCanvas001() { + + describe('UIAttributeFontInterfaceCanvas001', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0630_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0630_1 + * @tc.desc Canvas-light test colorMode: LIGHT + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0630_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0630_1 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas001"); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0630_1 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0630_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0630_2 + * @tc.desc Canvas-light test colorMode: LIGHT + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0630_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0630_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas001"); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0630_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas002.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas002.test.ets new file mode 100755 index 00000000..f416485a --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas002.test.ets @@ -0,0 +1,104 @@ + +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceCanvas002() { + + describe('UIAttributeFontInterfaceCanvas002', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0650_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0650_1 + * @tc.desc Canvas-light test colorMode: null + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0650_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0650_1 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error:Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas002"); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0650_1 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0650_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0650_2 + * @tc.desc Canvas-dark test colorMode: null + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0650_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0650_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error:Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas002"); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error:Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0650_2 finish.`); + done(); + }) + }) +} + \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas003.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas003.test.ets new file mode 100755 index 00000000..29558df5 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas003.test.ets @@ -0,0 +1,104 @@ + +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceCanvas003() { + + describe('UIAttributeFontInterfaceCanvas003', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0700_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0700_1 + * @tc.desc Canvas + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0700_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0700_1 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error:Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas003"); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0700_1 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0700_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0700_2 + * @tc.desc Canvas-dark + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0700_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0700_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error:Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas003"); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error:Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0700_2 finish.`); + done(); + }) + }) +} + \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas004.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas004.test.ets new file mode 100755 index 00000000..370ae4c9 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas004.test.ets @@ -0,0 +1,103 @@ + +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceCanvas004() { + + describe('UIAttributeFontInterfaceCanvas004', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0490_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0490_1 + * @tc.desc Canvas-light test colorMode: DARK + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0490_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0490_1 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error:Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas004"); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0490_1 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0490_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0490_2 + * @tc.desc Canvas-DARK test colorMode: DARK + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0490_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0490_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error:Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas004"); + windowSnap.snapShot(); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error:Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0490_2 finish.`); + done(); + }) + }) +} + \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas005.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas005.test.ets new file mode 100755 index 00000000..fb6671aa --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas005.test.ets @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceCanvas005() { + + describe('UIAttributeFontInterfaceCanvas005', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0500_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0500_1 + * @tc.desc Canvas-light test colorMode: System + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0500_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0500_1 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas005"); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0500_1 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0500_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0500_2 + * @tc.desc Canvas-dark test colorMode: System + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0500_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0500_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas005"); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0500_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas006.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas006.test.ets new file mode 100755 index 00000000..a172f6e7 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas006.test.ets @@ -0,0 +1,133 @@ + +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceCanvas006() { + + describe('UIAttributeFontInterfaceCanvas006', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0510_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0510_1 + * @tc.desc Canvas-light test custom colorMode + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0510_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0510_1 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + let driver: Driver = Driver.create(); + await Utils.sleep(500); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas006"); + await Utils.sleep(1000); + let button1: Component = await driver.findComponent(ON.id('button_01')); + let button2: Component = await driver.findComponent(ON.id('button_02')); + let button3: Component = await driver.findComponent(ON.id('button_03')); + let button4: Component = await driver.findComponent(ON.id('button_04')); + await Utils.sleep(100); + await button1.click(); + await Utils.sleep(500); + await button2.click(); + await Utils.sleep(500); + await button3.click(); + await Utils.sleep(500); + await button4.click(); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0510_1 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0510_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0510_2 + * @tc.desc Canvas-dark test custom colorMode + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0510_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0510_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + let driver: Driver = Driver.create(); + await Utils.sleep(500); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas006"); + await Utils.sleep(1000); + let button1: Component = await driver.findComponent(ON.id('button_01')); + let button2: Component = await driver.findComponent(ON.id('button_02')); + let button3: Component = await driver.findComponent(ON.id('button_03')); + let button4: Component = await driver.findComponent(ON.id('button_04')); + await Utils.sleep(100); + await button1.click(); + await Utils.sleep(500); + await button2.click(); + await Utils.sleep(500); + await button3.click(); + await Utils.sleep(500); + await button4.click(); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0510_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas007.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas007.test.ets new file mode 100755 index 00000000..fcfb1d6f --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCanvasTest/UIAttributeFontInterfaceCanvas007.test.ets @@ -0,0 +1,107 @@ + +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceCanvas007() { + + describe('UIAttributeFontInterfaceCanvas007', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0160_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0160_1 + * @tc.desc Canvas-light test custom colorMode + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0160_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0160_1 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + let driver: Driver = Driver.create(); + await Utils.sleep(500); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas007"); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0160_1 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0160_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0160_2 + * @tc.desc Canvas-dark test custom colorMode + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0160_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0160_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + let driver: Driver = Driver.create(); + await Utils.sleep(500); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas007"); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0160_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle001.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle001.test.ets new file mode 100755 index 00000000..f1767d56 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle001.test.ets @@ -0,0 +1,104 @@ + /* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + import { afterEach, describe, it } from '@ohos/hypium' + import Settings from '../model/Settings' + import windowSnap from '../model/snapShot' + import Logger from '../model/Logger' + import Utils from '../model/Utils' + + import { Component, Driver ,ON } from '@ohos.UiTest' + import uiAppearance from '@ohos.uiAppearance' + + /* + * + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + + export default function UIAttributeFontInterfaceCircle001() { + + describe('UIAttributeFontInterfaceCircle001', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0100_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0100_1 + * @tc.desc WithTheme:Circle + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0100_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0100_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle001"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0100_1 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0100_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0100_2 + * @tc.desc WithTheme:Circle + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0100_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0100_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle001"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0100_2 finish.`); + done(); + }) + }) + } diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle002.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle002.test.ets new file mode 100755 index 00000000..fac3c71c --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle002.test.ets @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceCircle002() { + + describe('UIAttributeFontInterfaceCircle002', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0690_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0690_1 + * @tc.desc WithTheme:Circle + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0690_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0690_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle002"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0690_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0690_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0690_2 + * @tc.desc WithTheme:Circle + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0690_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0690_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle002"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0690_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle003.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle003.test.ets new file mode 100755 index 00000000..46b9e982 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle003.test.ets @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceCircle003() { + + describe('UIAttributeFontInterfaceCircle003', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0460_1 + * @tc.name ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0460_1 + * @tc.desc WithTheme:Circle + */ + it('ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0460_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0460_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle003"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0460_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0460_2 + * @tc.name ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0460_2 + * @tc.desc WithTheme:Circle + */ + it('ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0460_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0460_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle003"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0460_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle004.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle004.test.ets new file mode 100755 index 00000000..dde72b64 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle004.test.ets @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceCircle004() { + + describe('UIAttributeFontInterfaceCircle004', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0670_1 + * @tc.name ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0670_1 + * @tc.desc WithTheme:Circle + */ + it('ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0670_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0670_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle004"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0670_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0670_2 + * @tc.name ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0670_2 + * @tc.desc WithTheme:Circle + */ + it('ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0670_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0670_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle004"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0670_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle005.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle005.test.ets new file mode 100755 index 00000000..5d3dfe4d --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle005.test.ets @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceCircle005() { + + describe('UIAttributeFontInterfaceCircle005', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0060_1 + * @tc.name ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0060_1 + * @tc.desc WithTheme:Circle + */ + it('ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0060_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0060_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle005"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0060_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0060_2 + * @tc.name ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0060_2 + * @tc.desc WithTheme:Circle + */ + it('ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0060_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0060_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle005"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUICOMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0060_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle0210.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle0210.test.ets new file mode 100755 index 00000000..378aca59 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle0210.test.ets @@ -0,0 +1,135 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceCircle0210() { + + describe('UIAttributeFontInterfaceCircle0210', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0210_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0210_1 + * @tc.desc colorMode test circle + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0210_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0210_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle0210"); + await Utils.sleep(500); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + let driver: Driver = Driver.create(); + let button1: Component = await driver.findComponent(ON.id('button_0210_01')); + let button2: Component = await driver.findComponent(ON.id('button_0210_02')); + let button3: Component = await driver.findComponent(ON.id('button_0210_03')); + let button4: Component = await driver.findComponent(ON.id('button_0210_04')); + await Utils.sleep(500); + await button1.click(); + await Utils.sleep(500); + await button1.click(); + await Utils.sleep(500); + await button2.click(); + await Utils.sleep(500); + await button3.click(); + await Utils.sleep(500); + await button4.click(); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0210_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0210_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0210_2 + * @tc.desc colorMode test circle + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0210_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0210_2 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle0210"); + await Utils.sleep(500); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + let driver: Driver = Driver.create(); + let button1: Component = await driver.findComponent(ON.id('button_0210_01')); + let button2: Component = await driver.findComponent(ON.id('button_0210_02')); + let button3: Component = await driver.findComponent(ON.id('button_0210_03')); + let button4: Component = await driver.findComponent(ON.id('button_0210_04')); + await Utils.sleep(500); + await button1.click(); + await Utils.sleep(500); + await button1.click(); + await Utils.sleep(500); + await button2.click(); + await Utils.sleep(500); + await button3.click(); + await Utils.sleep(500); + await button4.click(); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0210_2 finish.`); + done(); + }) + }) +} + diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle0270.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle0270.test.ets new file mode 100755 index 00000000..e00454ea --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCircleTest/UIAttributeFontInterfaceCircle0270.test.ets @@ -0,0 +1,102 @@ + +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceCircle0270() { + + describe('UIAttributeFontInterfaceCircle0270', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0270_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0270_1 + * @tc.desc colorMode test circle + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0270_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0270_1 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle0270"); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0270_1 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0270_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0270_2 + * @tc.desc colorMode test circle + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0270_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0270_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle0270"); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0270_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog001.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog001.test.ets new file mode 100755 index 00000000..16a940ae --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog001.test.ets @@ -0,0 +1,120 @@ + + /* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + import { afterEach, describe, it } from '@ohos/hypium' + import Settings from '../model/Settings' + import windowSnap from '../model/snapShot' + import Logger from '../model/Logger' + import Utils from '../model/Utils' + + import { Component, Driver ,ON } from '@ohos.UiTest' + import uiAppearance from '@ohos.uiAppearance' + + /* + * SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0160: + * 验证CheckBoxGroup组件动态切换浅色模式-深色模式正常切换 + * + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + + export default function UIAttributeFontInterfaceCustomDialog001() { + + describe('UIAttributeFontInterfaceCustomDialog001', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0090_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0090_1 + * @tc.desc WithTheme:dialog + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0090_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0090_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog001"); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let button1: Component = await driver.findComponent(ON.id('1')); + await Utils.sleep(1000); + await button1.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0090_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0090_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0090_2 + * @tc.desc WithTheme:dialog + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0090_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0090_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog001"); + let driver: Driver = Driver.create(); + await driver.delayMs(600); + let button1: Component = await driver.findComponent(ON.id('1')); + await Utils.sleep(1000); + await button1.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0090_2 finish.`); + done(); + }) + }) + } diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog002.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog002.test.ets new file mode 100755 index 00000000..a53c174f --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog002.test.ets @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceCustomDialog002() { + + describe('UIAttributeFontInterfaceCustomDialog002', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0540_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0540_1 + * @tc.desc WithTheme:dialog + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0540_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0540_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog002"); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let button1: Component = await driver.findComponent(ON.id('1')); + await Utils.sleep(1000); + await button1.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0540_1 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0540_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0540_2 + * @tc.desc WithTheme:dialog + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0540_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0540_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog002"); + let driver: Driver = Driver.create(); + await driver.delayMs(600); + let button1: Component = await driver.findComponent(ON.id('1')); + await Utils.sleep(1000); + await button1.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0540_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog003.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog003.test.ets new file mode 100755 index 00000000..7fb5ade4 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog003.test.ets @@ -0,0 +1,116 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceCustomDialog003() { + + describe('UIAttributeFontInterfaceCustomDialog003', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0230_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0230_1 + * @tc.desc WithTheme:dialog + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0230_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0230_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog003"); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let button1: Component = await driver.findComponent(ON.id('1')); + await Utils.sleep(1000); + await button1.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0230_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0230_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0230_2 + * @tc.desc WithTheme:dialog + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0230_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0230_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog003"); + let driver: Driver = Driver.create(); + await driver.delayMs(600); + let button1: Component = await driver.findComponent(ON.id('1')); + await Utils.sleep(1000); + await button1.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0230_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog004.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog004.test.ets new file mode 100755 index 00000000..995abde9 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog004.test.ets @@ -0,0 +1,116 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceCustomDialog004() { + + describe('UIAttributeFontInterfaceCustomDialog004', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0260_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0260_1 + * @tc.desc WithTheme:dialog + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0260_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0260_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog004"); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let button1: Component = await driver.findComponent(ON.id('1')); + await Utils.sleep(1000); + await button1.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0260_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0260_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0260_2 + * @tc.desc WithTheme:dialog + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0260_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0260_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog004"); + let driver: Driver = Driver.create(); + await driver.delayMs(600); + let button1: Component = await driver.findComponent(ON.id('1')); + await Utils.sleep(1000); + await button1.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0260_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog005.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog005.test.ets new file mode 100755 index 00000000..bfc339de --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog005.test.ets @@ -0,0 +1,201 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceCustomDialog005() { + + describe('UIAttributeFontInterfaceCustomDialog005', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0330_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0330_1 + * @tc.desc colorMode test CustomDialog + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0330_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0330_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog005"); + await Utils.sleep(500); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + let driver: Driver = Driver.create(); + let button1: Component = await driver.findComponent(ON.id('button_0050_01')); + let button2: Component = await driver.findComponent(ON.id('button_0050_02')); + let button3: Component = await driver.findComponent(ON.id('button_0050_03')); + let button4: Component = await driver.findComponent(ON.id('button_0050_04')); + let customDialog_01: Component = await driver.findComponent(ON.text('show Dialog01')); + let customDialog_02: Component = await driver.findComponent(ON.text('show Dialog02')); + let customDialog_03: Component = await driver.findComponent(ON.text('show Dialog03')); + await Utils.sleep(500); + await button1.click(); + await Utils.sleep(500); + await customDialog_01.click(); + await Utils.sleep(500); + await customDialog_02.click(); + await Utils.sleep(500); + await customDialog_03.click(); + await Utils.sleep(500); + await button1.click(); + await Utils.sleep(500); + await customDialog_01.click(); + await Utils.sleep(500); + await customDialog_02.click(); + await Utils.sleep(500); + await customDialog_03.click(); + await Utils.sleep(500); + await button2.click(); + await Utils.sleep(500); + await Utils.sleep(500); + await customDialog_01.click(); + await Utils.sleep(500); + await customDialog_02.click(); + await Utils.sleep(500); + await customDialog_03.click(); + await button3.click(); + await Utils.sleep(500); + await customDialog_01.click(); + await Utils.sleep(500); + await customDialog_02.click(); + await Utils.sleep(500); + await customDialog_03.click(); + await Utils.sleep(500); + await button4.click(); + await Utils.sleep(500); + await customDialog_01.click(); + await Utils.sleep(500); + await customDialog_02.click(); + await Utils.sleep(500); + await customDialog_03.click(); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0330_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0330_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0330_2 + * @tc.desc colorMode test CustomDialog + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0330_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0330_2 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog005"); + await Utils.sleep(500); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + let driver: Driver = Driver.create(); + let button1: Component = await driver.findComponent(ON.id('button_0050_01')); + let button2: Component = await driver.findComponent(ON.id('button_0050_02')); + let button3: Component = await driver.findComponent(ON.id('button_0050_03')); + let button4: Component = await driver.findComponent(ON.id('button_0050_04')); + let customDialog_01: Component = await driver.findComponent(ON.text('show Dialog01')); + let customDialog_02: Component = await driver.findComponent(ON.text('show Dialog02')); + let customDialog_03: Component = await driver.findComponent(ON.text('show Dialog03')); + await Utils.sleep(500); + await button1.click(); + await Utils.sleep(500); + await customDialog_01.click(); + await Utils.sleep(500); + await customDialog_02.click(); + await Utils.sleep(500); + await customDialog_03.click(); + await Utils.sleep(500); + await button1.click(); + await Utils.sleep(500); + await customDialog_01.click(); + await Utils.sleep(500); + await customDialog_02.click(); + await Utils.sleep(500); + await customDialog_03.click(); + await Utils.sleep(500); + await button2.click(); + await Utils.sleep(500); + await customDialog_01.click(); + await Utils.sleep(500); + await customDialog_02.click(); + await Utils.sleep(500); + await customDialog_03.click(); + await Utils.sleep(500); + await button3.click(); + await Utils.sleep(500); + await customDialog_01.click(); + await Utils.sleep(500); + await customDialog_02.click(); + await Utils.sleep(500); + await customDialog_03.click(); + await Utils.sleep(500); + await button4.click(); + await Utils.sleep(500); + await customDialog_01.click(); + await Utils.sleep(500); + await customDialog_02.click(); + await Utils.sleep(500); + await customDialog_03.click(); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0330_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog006.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog006.test.ets new file mode 100755 index 00000000..f91029de --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog006.test.ets @@ -0,0 +1,118 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceCustomDialog006() { + + describe('UIAttributeFontInterfaceCustomDialog006', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0370_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0370_1 + * @tc.desc WithTheme:dialog + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0370_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0370_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog006"); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(600); + let driver: Driver = Driver.create(); + await driver.delayMs(100); + await driver.delayMs(600); + let button1: Component = await driver.findComponent(ON.id('1')); + await driver.delayMs(100); + await button1.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0370_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0370_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0370_2 + * @tc.desc WithTheme:dialog + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0370_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0370_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog006"); + let driver: Driver = Driver.create(); + await driver.delayMs(600); + let button1: Component = await driver.findComponent(ON.id('1')); + await driver.delayMs(100); + await button1.click(); + await Utils.sleep(1000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0370_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog007.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog007.test.ets new file mode 100755 index 00000000..a5c6a341 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog007.test.ets @@ -0,0 +1,118 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0160: + * 验证CheckBoxGroup组件动态切换浅色模式-深色模式正常切换 + * + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceCustomDialog007() { + + describe('UIAttributeFontInterfaceCustomDialog007', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0450_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0450_1 + * @tc.desc WithTheme:dialog + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0450_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0450_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog007"); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + let driver: Driver = Driver.create(); + await driver.delayMs(600); + let button1: Component = await driver.findComponent(ON.id('1')); + await driver.delayMs(100); + await button1.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0450_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0450_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0450_2 + * @tc.desc WithTheme:dialog + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0450_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0450_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog007"); + let driver: Driver = Driver.create(); + await driver.delayMs(600); + let button1: Component = await driver.findComponent(ON.id('1')); + await driver.delayMs(100); + await button1.click(); + await Utils.sleep(1000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0450_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog0330.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog0330.test.ets new file mode 100755 index 00000000..c32f6b20 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceCustomDialogTest/UIAttributeFontInterfaceCustomDialog0330.test.ets @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceCustomDialog0330() { + + describe('UIAttributeFontInterfaceCustomDialog0330', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + }) +} + diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceDarkModeTest/UIAttributeFontInterfaceDarkMode001.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceDarkModeTest/UIAttributeFontInterfaceDarkMode001.test.ets new file mode 100755 index 00000000..d7327290 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceDarkModeTest/UIAttributeFontInterfaceDarkMode001.test.ets @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceDarkMode001() { + + describe('UIAttributeFontInterfaceDarkMode001', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number SUB_ACE_UI_COMPONENT_DARKMODE_0040 + * @tc.name SUB_ACE_UI_COMPONENT_DARKMODE_0040 + * @tc.desc colorMode test + */ + it('SUB_ACE_UI_COMPONENT_DARKMODE_0040', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_DARKMODE_0040 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + let driver: Driver = Driver.create(); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceDarkMode/UIAttributeFontInterfaceDarkMode0040"); + await Utils.sleep(1000); + let divider: Component = await driver.findComponent(ON.id('divider_0040')); + let point = await divider.getBounds(); + await driver.mouseMoveTo({ + x: point.right - 50, y: point.top - 30 + }) + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(1000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_DARKMODE_0040 finish.`); + done(); + }) + + /* + * @tc.number SUB_ACE_UI_COMPONENT_DARKMODE_0050 + * @tc.name SUB_ACE_UI_COMPONENT_DARKMODE_0050 + * @tc.desc colorMode test + */ + it('SUB_ACE_UI_COMPONENT_DARKMODE_0050', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_DARKMODE_0050 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + let driver: Driver = Driver.create(); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceDarkMode/UIAttributeFontInterfaceDarkMode0050"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(1000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_DARKMODE_0050 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage001.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage001.test.ets new file mode 100755 index 00000000..819862bf --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage001.test.ets @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceImage001() { + + describe('UIAttributeFontInterfaceImage001', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0050_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0050_1 + * @tc.desc WithTheme:Image + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0050_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0050_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage001"); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0050_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0050_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0050_2 + * @tc.desc WithTheme:Image + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0050_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0050_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage001"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0050_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage002.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage002.test.ets new file mode 100755 index 00000000..f1b4e08e --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage002.test.ets @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceImage002() { + + describe('UIAttributeFontInterfaceImage002', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0110_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0110_1 + * @tc.desc WithTheme:Image + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0110_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0110_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage002"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0110_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0110_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0110_2 + * @tc.desc WithTheme:Image + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0110_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0110_2 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage002"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0110_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage003.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage003.test.ets new file mode 100755 index 00000000..327428f1 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage003.test.ets @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceImage003() { + + describe('UIAttributeFontInterfaceImage003', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0120_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0120_1 + * @tc.desc WithTheme:Image + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0120_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0120_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage003"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0120_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0120_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0120_2 + * @tc.desc WithTheme:Image + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0120_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0120_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage003"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0120_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage004.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage004.test.ets new file mode 100755 index 00000000..c563a71f --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage004.test.ets @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceImage004() { + + describe('UIAttributeFontInterfaceImage004', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0520_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0520_1 + * @tc.desc WithTheme:Image + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0520_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0520_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage004"); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0520_1 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0520_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0520_2 + * @tc.desc WithTheme:Image + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0520_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0520_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage004"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0520_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage005.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage005.test.ets new file mode 100755 index 00000000..6ba6bd4a --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage005.test.ets @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceImage005() { + + describe('UIAttributeFontInterfaceImage005', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0390_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0390_1 + * @tc.desc WithTheme:Image + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0390_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0390_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage005"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0390_1 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0390_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0390_2 + * @tc.desc WithTheme:Image + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0390_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0390_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage005"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0390_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage006.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage006.test.ets new file mode 100755 index 00000000..79dc8d87 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage006.test.ets @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceImage006() { + + describe('UIAttributeFontInterfaceImage006', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0440_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0440_1 + * @tc.desc WithTheme:Image + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0440_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0440_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage006"); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0440_1 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0440_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0440_2 + * @tc.desc WithTheme:Image + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0440_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0440_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage006"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0440_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage0220.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage0220.test.ets new file mode 100755 index 00000000..ff7177d3 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceImageTest/UIAttributeFontInterfaceImage0220.test.ets @@ -0,0 +1,135 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceImage0220() { + + describe('UIAttributeFontInterfaceImage0220', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0220_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0220_1 + * @tc.desc colorMode test image + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0220_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0220_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage0220"); + await Utils.sleep(500); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + let driver: Driver = Driver.create(); + let button1: Component = await driver.findComponent(ON.id('button_0220_01')); + let button2: Component = await driver.findComponent(ON.id('button_0220_02')); + let button3: Component = await driver.findComponent(ON.id('button_0220_03')); + let button4: Component = await driver.findComponent(ON.id('button_0220_04')); + await Utils.sleep(500); + await button1.click(); + await Utils.sleep(500); + await button1.click(); + await Utils.sleep(500); + await button2.click(); + await Utils.sleep(500); + await button3.click(); + await Utils.sleep(500); + await button4.click(); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0220_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0220_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0220_2 + * @tc.desc colorMode test image + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0220_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0220_2 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage0220"); + await Utils.sleep(500); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + let driver: Driver = Driver.create(); + let button1: Component = await driver.findComponent(ON.id('button_0220_01')); + let button2: Component = await driver.findComponent(ON.id('button_0220_02')); + let button3: Component = await driver.findComponent(ON.id('button_0220_03')); + let button4: Component = await driver.findComponent(ON.id('button_0220_04')); + await Utils.sleep(500); + await button1.click(); + await Utils.sleep(500); + await button1.click(); + await Utils.sleep(500); + await button2.click(); + await Utils.sleep(500); + await button3.click(); + await Utils.sleep(500); + await button4.click(); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0220_2 finish.`); + done(); + }) + }) +} + diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu001.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu001.test.ets new file mode 100755 index 00000000..6f9746b9 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu001.test.ets @@ -0,0 +1,336 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceMenu001() { + + describe('UIAttributeFontInterfaceMenu001', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_1 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu001"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let button1: Component = await driver.findComponent(ON.id('1')); + await Utils.sleep(1000) + await button1.click(); + await Utils.sleep(1000) + let menu0010_text: Component = await driver.findComponent(ON.id('menu0010_text')); + await Utils.sleep(1000) + await menu0010_text.click(); + await Utils.sleep(2000) + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_1 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_2 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu001"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let button1: Component = await driver.findComponent(ON.id('2')); + await Utils.sleep(1000) + await button1.click(); + await Utils.sleep(1000) + let menu0010_text: Component = await driver.findComponent(ON.id('menu0010_text')); + await Utils.sleep(1000) + await menu0010_text.click(); + await Utils.sleep(2000) + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_2 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_3 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_3 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_3', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_3 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu001"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let button1: Component = await driver.findComponent(ON.id('3')); + await Utils.sleep(1000) + await button1.click(); + await Utils.sleep(1000) + let menu0010_text: Component = await driver.findComponent(ON.id('menu0010_text')); + await Utils.sleep(1000) + await menu0010_text.click(); + await Utils.sleep(1000) + let submenu: Component = await driver.findComponent(ON.text('show WithThemeThree')); + await Utils.sleep(1000) + await submenu.click(); + await Utils.sleep(2000) + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_3 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_4 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_4 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_4', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_3 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu001"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let button1: Component = await driver.findComponent(ON.id('4')); + await Utils.sleep(1000) + await button1.click(); + await Utils.sleep(1000) + let menu0010_text: Component = await driver.findComponent(ON.id('menu0010_text')); + await Utils.sleep(1000) + await menu0010_text.click(); + await Utils.sleep(1000) + let submenu: Component = await driver.findComponent(ON.text('show WithThemeThree')); + await Utils.sleep(1000) + await submenu.click(); + await Utils.sleep(2000) + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_4 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_5 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_5 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_5', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_5 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu001"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let button1: Component = await driver.findComponent(ON.id('1')); + await Utils.sleep(1000) + await button1.click(); + await Utils.sleep(1000) + let menu0010_text: Component = await driver.findComponent(ON.id('menu0010_text')); + await Utils.sleep(1000) + await menu0010_text.click(); + await Utils.sleep(2000) + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_5 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_6 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_6 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_6', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_6 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu001"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let button1: Component = await driver.findComponent(ON.id('2')); + await Utils.sleep(1000) + await button1.click(); + await Utils.sleep(1000) + let menu0010_text: Component = await driver.findComponent(ON.id('menu0010_text')); + await Utils.sleep(1000) + await menu0010_text.click(); + await Utils.sleep(2000) + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_6 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_7 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_7 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_7', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_7 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu001"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let button1: Component = await driver.findComponent(ON.id('3')); + await Utils.sleep(1000) + await button1.click(); + await Utils.sleep(1000) + let menu0010_text: Component = await driver.findComponent(ON.id('menu0010_text')); + await Utils.sleep(1000) + await menu0010_text.click(); + await Utils.sleep(1000) + let submenu: Component = await driver.findComponent(ON.text('show WithThemeThree')); + await Utils.sleep(1000) + await submenu.click(); + await Utils.sleep(2000) + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_7 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_8 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_8 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_8', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_8 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu001"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let button1: Component = await driver.findComponent(ON.id('4')); + await Utils.sleep(1000) + await button1.click(); + await Utils.sleep(1000) + let menu0010_text: Component = await driver.findComponent(ON.id('menu0010_text')); + await Utils.sleep(1000) + await menu0010_text.click(); + await Utils.sleep(1000) + let submenu: Component = await driver.findComponent(ON.text('show WithThemeThree')); + await Utils.sleep(1000) + await submenu.click(); + await Utils.sleep(2000) + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0010_8 finish.`); + done(); + }) + }) +} + + diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu002.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu002.test.ets new file mode 100755 index 00000000..beb635a4 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu002.test.ets @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceMenu002() { + + describe('UIAttributeFontInterfaceMenu002', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0040_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0040_1 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0040_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0040_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu002"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0040_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0040_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0040_2 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0040_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0040_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu002"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0040_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu003.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu003.test.ets new file mode 100755 index 00000000..9fbb143b --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu003.test.ets @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceMenu003() { + + describe('UIAttributeFontInterfaceMenu003', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0080_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0080_2 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0080_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0080_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu003"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0080_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0080_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0080_2 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0080_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0080_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu003"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0080_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu004.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu004.test.ets new file mode 100755 index 00000000..2502201c --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu004.test.ets @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceMenu004() { + + describe('UIAttributeFontInterfaceMenu004', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0580_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0580_1 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0580_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0580_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu004"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0580_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0580_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0580_2 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0580_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0580_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu004"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0580_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu005.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu005.test.ets new file mode 100755 index 00000000..ab190000 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu005.test.ets @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceMenu005() { + + describe('UIAttributeFontInterfaceMenu005', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0290_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0290_1 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0290_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0290_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu005"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0290_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0290_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0290_2 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0290_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0290_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu005"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0290_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu006.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu006.test.ets new file mode 100755 index 00000000..85f3ff47 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu006.test.ets @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceMenu006() { + + describe('UIAttributeFontInterfaceMenu006', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0430_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0430_1 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0430_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0430_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu006"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0430_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0430_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0430_2 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0430_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0430_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu006"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0430_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu007.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu007.test.ets new file mode 100755 index 00000000..0a1eecd6 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceMenuTest/UIAttributeFontInterfaceMenu007.test.ets @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceMenu007() { + + describe('UIAttributeFontInterfaceMenu007', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0130_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0130_1 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0130_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0130_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu007"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0130_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0130_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0130_2 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0130_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0130_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu007"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0130_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup001.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup001.test.ets new file mode 100755 index 00000000..bff222db --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup001.test.ets @@ -0,0 +1,105 @@ + + /* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + import { afterEach, describe, it } from '@ohos/hypium' + import Settings from '../model/Settings' + import windowSnap from '../model/snapShot' + import Logger from '../model/Logger' + import Utils from '../model/Utils' + + import { Component, Driver ,ON } from '@ohos.UiTest' + import uiAppearance from '@ohos.uiAppearance' + + /* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + + export default function UIAttributeFontInterfacePopup001() { + + describe('UIAttributeFontInterfacePopup001', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0020_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0020_1 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0020_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0020_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup001"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0020_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0020_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0020_2 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0020_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0020_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup001"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0020_2 finish.`); + done(); + }) + }) + } diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup002.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup002.test.ets new file mode 100755 index 00000000..9a974105 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup002.test.ets @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfacePopup002() { + + describe('UIAttributeFontInterfacePopup002', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0590_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0590_1 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0590_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0590_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup002"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0590_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0590_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0590_2 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0590_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0590_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup002"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0590_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup003.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup003.test.ets new file mode 100755 index 00000000..257323dc --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup003.test.ets @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfacePopup003() { + + describe('UIAttributeFontInterfacePopup003', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0640_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0640_1 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0640_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0640_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup003"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0640_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0640_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0640_2 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0640_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0640_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup003"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0640_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup004.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup004.test.ets new file mode 100755 index 00000000..4512f40c --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup004.test.ets @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfacePopup004() { + + describe('UIAttributeFontInterfacePopup004', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0530_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0530_1 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0530_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0530_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup004"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0530_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0530_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0530_2 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0530_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0530_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup004"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0530_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup005.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup005.test.ets new file mode 100755 index 00000000..1042325b --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup005.test.ets @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfacePopup005() { + + describe('UIAttributeFontInterfacePopup005', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup006.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup006.test.ets new file mode 100755 index 00000000..47464ca7 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup006.test.ets @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfacePopup006() { + + describe('UIAttributeFontInterfacePopup006', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0250_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0250_1 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0250_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0250_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup006"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0250_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0250_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0250_1 + * @tc.desc WithTheme:Menu + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0250_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0250_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup006"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0590_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup007.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup007.test.ets new file mode 100755 index 00000000..ffe26580 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfacePopupTest/UIAttributeFontInterfacePopup007.test.ets @@ -0,0 +1,291 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfacePopup007() { + + describe('UIAttributeFontInterfacePopup007', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_1 + * @tc.desc WithTheme:popup + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup007"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let button1: Component = await driver.findComponent(ON.id('1')); + await Utils.sleep(1000) + await button1.click(); + await Utils.sleep(2000) + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_1 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_2 + * @tc.desc WithTheme:popup + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_2 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup007"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let button1: Component = await driver.findComponent(ON.id('2')); + await Utils.sleep(1000) + await button1.click(); + await Utils.sleep(2000) + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_2 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_3 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_3 + * @tc.desc WithTheme:popup + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_3', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_3 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup007"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let button1: Component = await driver.findComponent(ON.id('3')); + await Utils.sleep(1000) + await button1.click(); + await Utils.sleep(2000) + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_3 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_4 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_4 + * @tc.desc WithTheme:popup + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_4', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_4 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup007"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let button1: Component = await driver.findComponent(ON.id('4')); + await Utils.sleep(1000) + await button1.click(); + await Utils.sleep(2000) + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_4 finish.`); + done(); + }) + + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_5 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_5 + * @tc.desc WithTheme:popup + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_5', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_5 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Settings.createWindow("testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup007"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let button1: Component = await driver.findComponent(ON.id('1')); + await Utils.sleep(1000) + await button1.click(); + await Utils.sleep(2000) + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_5 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_6 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_6 + * @tc.desc WithTheme:popup + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_6', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_6 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Settings.createWindow("testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup007"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let button1: Component = await driver.findComponent(ON.id('2')); + await Utils.sleep(1000) + await button1.click(); + await Utils.sleep(2000) + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_6 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_7 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_7 + * @tc.desc WithTheme:popup + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_7', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_8 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Settings.createWindow("testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup007"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let button1: Component = await driver.findComponent(ON.id('3')); + await Utils.sleep(1000) + await button1.click(); + await Utils.sleep(2000) + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_7 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_8 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_8 + * @tc.desc WithTheme:popup + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_8', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_8 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Settings.createWindow("testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup007"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let button1: Component = await driver.findComponent(ON.id('4')); + await Utils.sleep(1000) + await button1.click(); + await Utils.sleep(2000) + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0410_8 finish.`); + done(); + }) + }) +} + + diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider001.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider001.test.ets new file mode 100755 index 00000000..526e62cb --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider001.test.ets @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + import { afterEach, describe, it } from '@ohos/hypium' + import Settings from '../model/Settings' + import windowSnap from '../model/snapShot' + import Logger from '../model/Logger' + import Utils from '../model/Utils' + + import { Component, Driver ,ON } from '@ohos.UiTest' + import uiAppearance from '@ohos.uiAppearance' + + /* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + + export default function UIAttributeFontInterfaceSlider001() { + + describe('UIAttributeFontInterfaceSlider001', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0360_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0360_1 + * @tc.desc WithTheme:slider + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0360_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0360_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider001"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0360_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0360_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0360_2 + * @tc.desc WithTheme:slider + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0360_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0360_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider001"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0360_2 finish.`); + done(); + }) + }) + } diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider002.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider002.test.ets new file mode 100755 index 00000000..91ccc6c9 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider002.test.ets @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceSlider002() { + + describe('UIAttributeFontInterfaceSlider002', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0620_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0620_1 + * @tc.desc WithTheme:slider + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0620_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0620_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider002"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0620_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0620_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0620_2 + * @tc.desc WithTheme:slider + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0620_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0620_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider002"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0620_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider003.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider003.test.ets new file mode 100755 index 00000000..f09ba6d2 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider003.test.ets @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceSlider003() { + + describe('UIAttributeFontInterfaceSlider003', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0240_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0240_1 + * @tc.desc WithTheme:slider + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0240_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0240_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider003"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0240_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0240_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0240_2 + * @tc.desc WithTheme:slider + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0240_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0240_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider003"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0240_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider004.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider004.test.ets new file mode 100755 index 00000000..1e6d3779 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider004.test.ets @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceSlider004() { + + describe('UIAttributeFontInterfaceSlider004', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0680_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0680_1 + * @tc.desc WithTheme:slider + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0680_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0680_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider004"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0680_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0680_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0680_2 + * @tc.desc WithTheme:slider + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0680_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0680_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider004"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0680_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider005.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider005.test.ets new file mode 100755 index 00000000..0f0df0f5 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider005.test.ets @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceSlider005() { + + describe('UIAttributeFontInterfaceSlider005', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0570_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0570_1 + * @tc.desc WithTheme:slider + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0570_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0570_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider005"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0570_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0570_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0570_2 + * @tc.desc WithTheme:slider + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0570_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0570_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider005"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0570_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider006.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider006.test.ets new file mode 100755 index 00000000..f4b64433 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider006.test.ets @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceSlider006() { + + describe('UIAttributeFontInterfaceSlider006', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0470_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0470_1 + * @tc.desc WithTheme:slider + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0470_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0470_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider006"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0470_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0470_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0470_2 + * @tc.desc WithTheme:slider + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0470_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0470_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider006"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0470_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider007.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider007.test.ets new file mode 100755 index 00000000..eb2e5fdc --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider007.test.ets @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceSlider007() { + + describe('UIAttributeFontInterfaceSlider007', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0560_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0560_1 + * @tc.desc WithTheme:slider + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0560_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0560_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider007"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0560_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0560_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0560_2 + * @tc.desc WithTheme:slider + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0560_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0560_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider007"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0560_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider0180.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider0180.test.ets new file mode 100755 index 00000000..6e676780 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceSliderTest/UIAttributeFontInterfaceSlider0180.test.ets @@ -0,0 +1,135 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceSlider0180() { + + describe('UIAttributeFontInterfaceSlider0180', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0180_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0180_1 + * @tc.desc colorMode test slider + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0180_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0180_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider0180"); + await Utils.sleep(500); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + let driver: Driver = Driver.create(); + let button1: Component = await driver.findComponent(ON.id('button_0180_01')); + let button2: Component = await driver.findComponent(ON.id('button_0180_02')); + let button3: Component = await driver.findComponent(ON.id('button_0180_03')); + let button4: Component = await driver.findComponent(ON.id('button_0180_04')); + await Utils.sleep(500); + await button1.click(); + await Utils.sleep(500); + await button1.click(); + await Utils.sleep(500); + await button2.click(); + await Utils.sleep(500); + await button3.click(); + await Utils.sleep(500); + await button4.click(); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0180_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0180_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0180_2 + * @tc.desc colorMode test slider + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0180_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0180_2 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider0180"); + await Utils.sleep(500); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + let driver: Driver = Driver.create(); + let button1: Component = await driver.findComponent(ON.id('button_0180_01')); + let button2: Component = await driver.findComponent(ON.id('button_0180_02')); + let button3: Component = await driver.findComponent(ON.id('button_0180_03')); + let button4: Component = await driver.findComponent(ON.id('button_0180_04')); + await Utils.sleep(500); + await button1.click(); + await Utils.sleep(500); + await button1.click(); + await Utils.sleep(500); + await button2.click(); + await Utils.sleep(500); + await button3.click(); + await Utils.sleep(500); + await button4.click(); + await Utils.sleep(1000); + windowSnap.snapShot(); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0180_2 finish.`); + done(); + }) + }) +} + diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText001.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText001.test.ets new file mode 100755 index 00000000..6fecedfc --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText001.test.ets @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + import { afterEach, describe, it } from '@ohos/hypium' + import Settings from '../model/Settings' + import windowSnap from '../model/snapShot' + import Logger from '../model/Logger' + import Utils from '../model/Utils' + + import { Component, Driver ,ON } from '@ohos.UiTest' + import uiAppearance from '@ohos.uiAppearance' + + /* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + + export default function UIAttributeFontInterfaceText001() { + + describe('UIAttributeFontInterfaceText001', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0660_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0660_1 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0660_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0660_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText001"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0660_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0660_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0660_2 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0660_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0660_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText001"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0660_2 finish.`); + done(); + }) + }) + } diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText002.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText002.test.ets new file mode 100755 index 00000000..261ba1e7 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText002.test.ets @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceText002() { + + describe('UIAttributeFontInterfaceText002', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0170_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0170_1 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0170_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0170_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText002"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0170_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0170_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0170_2 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0170_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0170_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText002"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0170_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText003.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText003.test.ets new file mode 100755 index 00000000..b99b6a88 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText003.test.ets @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/*/ + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceText003() { + + describe('UIAttributeFontInterfaceText003', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0350_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0350_1 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0350_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0350_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText003"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0350_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0350_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0350_2 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0350_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0350_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText003"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0350_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText004.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText004.test.ets new file mode 100755 index 00000000..8ab737d4 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText004.test.ets @@ -0,0 +1,281 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceText004() { + + describe('UIAttributeFontInterfaceText004', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText004"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let btn: Component = await driver.findComponent(ON.id('btn1')); + await Utils.sleep(1000) + await btn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_1 finish.`); + done(); + }) + + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText004"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let btn: Component = await driver.findComponent(ON.id('btn1')); + await Utils.sleep(1000) + await btn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_2 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_3 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_3 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_3', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_3 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText004"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let btn: Component = await driver.findComponent(ON.id('btn2')); + await Utils.sleep(1000) + await btn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_3 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_4 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_4 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_4', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_4 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText004"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let btn: Component = await driver.findComponent(ON.id('btn2')); + await Utils.sleep(1000) + await btn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_4 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_5 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_5 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_5', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_3 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText004"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let btn: Component = await driver.findComponent(ON.id('btn3')); + await Utils.sleep(1000) + await btn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_5 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_6 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_6 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_6', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_6 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText004"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let btn: Component = await driver.findComponent(ON.id('btn3')); + await Utils.sleep(1000) + await btn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_6 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_7 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_7 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_7', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_7 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText004"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let btn: Component = await driver.findComponent(ON.id('btn4')); + await Utils.sleep(1000) + await btn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_7 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_8 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_8 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_8', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_8 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText004"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let btn: Component = await driver.findComponent(ON.id('btn4')); + await Utils.sleep(1000) + await btn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0420_8 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText005.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText005.test.ets new file mode 100755 index 00000000..1abd984b --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText005.test.ets @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceText005() { + + describe('UIAttributeFontInterfaceText005', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0610_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0610_1 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0610_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0610_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText005"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0610_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0610_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0610_2 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0610_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0610_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText005"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0610_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText0140.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText0140.test.ets new file mode 100755 index 00000000..c158fdd0 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText0140.test.ets @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceText0140() { + + describe('UIAttributeFontInterfaceText0140', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0140_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0140_1 + * @tc.desc colorMode test text + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0140_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0140_1 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText0140"); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0140_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0140_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0140_2 + * @tc.desc colorMode test Text + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0140_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0140_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText0140"); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0140_2 finish.`); + done(); + }) + }) +} + diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText0200.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText0200.test.ets new file mode 100755 index 00000000..218ccbb5 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceTextTest/UIAttributeFontInterfaceText0200.test.ets @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceText0200() { + + describe('UIAttributeFontInterfaceText0200', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0200_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0200_1 + * @tc.desc colorMode test text + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0200_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0200_1 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText0200"); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0200_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0200_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0200_2 + * @tc.desc colorMode test Text + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0200_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0200_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText0200"); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(1000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0200_2 finish.`); + done(); + }) + }) +} + diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo001.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo001.test.ets new file mode 100755 index 00000000..695fd909 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo001.test.ets @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceVideo001() { + + describe('UIAttributeFontInterfaceVideo001', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0150_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0150_1 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0150_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0150_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo001"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0150_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0150_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0150_2 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0150_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0150_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo001"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0150_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo002.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo002.test.ets new file mode 100755 index 00000000..fabbfa51 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo002.test.ets @@ -0,0 +1,106 @@ + /* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + import { afterEach, describe, it } from '@ohos/hypium' + import Settings from '../model/Settings' + import windowSnap from '../model/snapShot' + import Logger from '../model/Logger' + import Utils from '../model/Utils' + + import { Component, Driver ,ON } from '@ohos.UiTest' + import uiAppearance from '@ohos.uiAppearance' + + /* + * + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + + export default function UIAttributeFontInterfaceVideo002() { + + describe('UIAttributeFontInterfaceVideo002', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0600_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0600_1 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0600_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0600_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo002"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0600_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0600_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0600_2 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0600_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0600_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo002"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0600_2 finish.`); + done(); + }) + }) + } diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo003.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo003.test.ets new file mode 100755 index 00000000..31046a52 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo003.test.ets @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceVideo003() { + + describe('UIAttributeFontInterfaceVideo003', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0480_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0480_1 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0480_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0480_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo003"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0480_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0480_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0480_2 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0480_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0480_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo003"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0480_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo004.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo004.test.ets new file mode 100755 index 00000000..007b6301 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo004.test.ets @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceVideo004() { + + describe('UIAttributeFontInterfaceVideo004', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0380_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0380_1 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0380_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0480_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo004"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0480_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0380_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0380_2 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0380_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0480_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo004"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0480_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo005.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo005.test.ets new file mode 100755 index 00000000..be7981f0 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo005.test.ets @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceVideo005() { + + describe('UIAttributeFontInterfaceVideo005', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0400_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0400_1 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0400_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0400_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo005"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0400_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0400_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0400_2 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0400_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0400_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo005"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0400_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo006.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo006.test.ets new file mode 100755 index 00000000..1cc83d2f --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo006.test.ets @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceVideo006() { + + describe('UIAttributeFontInterfaceVideo006', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0280_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0280_1 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0280_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0280_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo006"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0280_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0280_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0280_2 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0280_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0280_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo006"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0280_2 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo007.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo007.test.ets new file mode 100755 index 00000000..d27a288f --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIAttributeFontInterfaceVideoTest/UIAttributeFontInterfaceVideo007.test.ets @@ -0,0 +1,291 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIAttributeFontInterfaceVideo007() { + + describe('UIAttributeFontInterfaceVideo007', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_1 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_1 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_1', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_1 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo007"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let btn: Component = await driver.findComponent(ON.id('btn1')); + await Utils.sleep(1000) + await btn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_1 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_2 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_2 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_2', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_2 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo007"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let btn: Component = await driver.findComponent(ON.id('btn1')); + await Utils.sleep(1000) + await btn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_2 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_3 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_3 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_3', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_3 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo007"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let btn: Component = await driver.findComponent(ON.id('btn2')); + await Utils.sleep(1000) + await btn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_3 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_4 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_4 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_4', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_4 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo007"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let btn: Component = await driver.findComponent(ON.id('btn2')); + await Utils.sleep(1000) + await btn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_4 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_5 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_5 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_5', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_3 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo007"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let btn: Component = await driver.findComponent(ON.id('btn3')); + await Utils.sleep(1000) + await btn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_5 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_6 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_6 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_6', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_6 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo007"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let btn: Component = await driver.findComponent(ON.id('btn3')); + await Utils.sleep(1000) + await btn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_6 finish.`); + done(); + }) + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_7 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_7 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_7', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_7 start.`); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo007"); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let btn: Component = await driver.findComponent(ON.id('btn4')); + await Utils.sleep(1000) + await btn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_7 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_8 + * @tc.name ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_8 + * @tc.desc WithTheme + */ + it('ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_8', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_8 start.`); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_DARK).then(() => { + console.info('Set dark-mode successfully.'); + }).catch((error: Error) => { + console.error('Set dark-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Settings.createWindow("testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo007"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000) + let btn: Component = await driver.findComponent(ON.id('btn4')); + await Utils.sleep(1000) + await btn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await uiAppearance.setDarkMode(uiAppearance.DarkMode.ALWAYS_LIGHT).then(() => { + console.info('Set light-mode successfully.'); + }).catch((error: Error) => { + console.error('Set light-mode failed, ' + error.message); + }); + await Utils.sleep(2000); + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_RESOURCETHEME_FORCEDARKLIGHT_0300_8 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement.test.ets new file mode 100755 index 00000000..4af36a3e --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement.test.ets @@ -0,0 +1,200 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Driver, ON } from '@kit.TestKit' + +export default function UIComponentPopupBoxActionsheetInterfaceReplacement() { + + describe('UIComponentPopupBoxActionsheetInterfaceReplacement', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0320 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0320 + * @tc.desc :ActionSheet + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0320', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0320 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0320"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0320 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0300 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0300 + * @tc.desc :ActionSheet + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0300', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0300 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0300"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0300 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0230 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0230 + * @tc.desc :ActionSheet + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0230', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0230 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0230"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(1000); + let confirm = await driver.findComponent(ON.text('ConfirmButton')); + await confirm.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0230 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0290 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0290 + * @tc.desc :ActionSheet + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0290', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0290 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0290"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0290 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0270 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0270 + * @tc.desc :ActionSheet + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0270', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0270 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0270"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0270 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0280 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0280 + * @tc.desc :ActionSheet + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0280', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0280 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0280"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0280 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0280_1 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0280_1 + * @tc.desc :ActionSheet + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0280_1', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0280_1 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0280"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(1000); + let point = await show.getBoundsCenter(); + await driver.click(point.x+100,point.y); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0280_1 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0310 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0310 + * @tc.desc :ActionSheet + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0310', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0310 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0310"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ACTIONSHEET_INTERFACE_0310 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement.test.ets new file mode 100755 index 00000000..b699932f --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement.test.ets @@ -0,0 +1,440 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Driver, ON } from '@ohos.UiTest' + +export default function UIComponentPopupBoxAlertDialogInterfaceReplacement() { + + describe('UIComponentPopupBoxAlertDialogInterfaceReplacement', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0390 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0390 + * @tc.desc :AlertDialog + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0390', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0390 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0390"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0390 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0690 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0690 + * @tc.desc :AlertDialog + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0690', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0690 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0690"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0690 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0240 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0240 + * @tc.desc :AlertDialog + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0240', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0240 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0240"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0240 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0130 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0130 + * @tc.desc :AlertDialog + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0130', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0130 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0130"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0130 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0130_1 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0130_1 + * @tc.desc :AlertDialog + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0130_1', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0130_1 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0130"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(1000); + let point = await show.getBoundsCenter(); + await driver.click(point.x + 100, point.y); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0130_1 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0570 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0570 + * @tc.desc :AlertDialog + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0570', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0570 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0570"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0570 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0570_1 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0570_1 + * @tc.desc :AlertDialog + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0570_1', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0570_1 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0570"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(1000); + let point = await show.getBoundsCenter(); + await driver.click(point.x + 100, point.y); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0570_1 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0560 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0560 + * @tc.desc :AlertDialog + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0560', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0560 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0560"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0560 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0560_1 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0560_1 + * @tc.desc :AlertDialog + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0560_1', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0560_1 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0560"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(1000); + let point = await show.getBoundsCenter(); + await driver.click(point.x + 100, point.y); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0560_1 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0230 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0230 + * @tc.desc :AlertDialog + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0230', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0230 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0230"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0230 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0140 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0140 + * @tc.desc :AlertDialog + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0140', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0140 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0140"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0140 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0270 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0270 + * @tc.desc :AlertDialog + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0270', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0270 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0270"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0270 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0270_1 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0270_1 + * @tc.desc :AlertDialog + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0270_1', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0270_1 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0270"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(1000); + let primaryButton = await driver.findComponent(ON.text('primaryButton')); + await primaryButton.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0270_1 finish.`); + done(); + }) + /* +* @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0780 +* @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0780 +* @tc.desc :AlertDialog +*/ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0780', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0780 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0780"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0780 finish.`); + done(); + }) + /* +* @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0800 +* @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0800 +* @tc.desc :AlertDialog +*/ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0800', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0800 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0800"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0800 finish.`); + done(); + }) + /* +* @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0370 +* @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0370 +* @tc.desc :AlertDialog +*/ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0370', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0370 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0370"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0370 finish.`); + done(); + }) + /* +* @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0370_1 +* @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0370_1 +* @tc.desc :AlertDialog +*/ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0370_1', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0370_1 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0370"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(1000); + let primaryButton = await driver.findComponent(ON.text('primaryButton')); + await primaryButton.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0370_1 finish.`); + done(); + }) + /* +* @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0280 +* @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0280 +* @tc.desc :AlertDialog +*/ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0280', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0280 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0280"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0280 finish.`); + done(); + }) + /* +* @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0280_1 +* @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0280_1 +* @tc.desc :AlertDialog +*/ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0280_1', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0280_1 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0280"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(1000); + let primaryButton = await driver.findComponent(ON.text('secondaryButton')); + await primaryButton.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0280_1 finish.`); + done(); + }) + /* +* @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0410 +* @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0410 +* @tc.desc :AlertDialog +*/ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0410', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0410 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0410"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('show')); + await show.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0410 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement.test.ets new file mode 100755 index 00000000..e507afb2 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement.test.ets @@ -0,0 +1,116 @@ + /* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + + import { Driver, MouseButton, ON } from '@ohos.UiTest' +import { JSON } from '@kit.ArkTS' + + export default function UIComponentPopupBoxCalendarPickerFeatureReplacement() { + + describe('UIComponentPopupBoxCalendarPickerFeatureReplacement', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + it('SUB_ACE_UI_COMPONENT_POPUPBOX_CALENDARPICKER_FEATURE_0010', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_CALENDARPICKER_FEATURE_0010 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement0010"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('UIComponentPopupBoxCalendarPickerFeatureReplacement0010')); + await show.click(); + await Utils.sleep(1000); + let point = await show.getBounds(); + await driver.mouseClick({x:point.right-20,y:point.top+5},MouseButton.MOUSE_BUTTON_LEFT); + await Utils.sleep(100); + await driver.mouseClick({x:point.right-20,y:point.top+5},MouseButton.MOUSE_BUTTON_LEFT); + await Utils.sleep(100); + await driver.mouseClick({x:point.right-20,y:point.top+5},MouseButton.MOUSE_BUTTON_LEFT); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_CALENDARPICKER_FEATURE_0010 finish.`); + done(); + }) + it('SUB_ACE_UI_COMPONENT_POPUPBOX_CALENDARPICKER_FEATURE_0020', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_CALENDARPICKER_FEATURE_0010 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement0020"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('UIComponentPopupBoxCalendarPickerFeatureReplacement0020')); + await show.click(); + await Utils.sleep(1000); + let point = await show.getBounds(); + await driver.mouseClick({x:point.right-20,y:point.top+5},MouseButton.MOUSE_BUTTON_LEFT); + await Utils.sleep(100); + await driver.mouseClick({x:point.right-20,y:point.top+5},MouseButton.MOUSE_BUTTON_LEFT); + await Utils.sleep(100); + await driver.mouseClick({x:point.right-20,y:point.top+5},MouseButton.MOUSE_BUTTON_LEFT); + await Utils.sleep(100); + await show.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_CALENDARPICKER_FEATURE_0020 finish.`); + done(); + }) + it('SUB_ACE_UI_COMPONENT_POPUPBOX_CALENDARPICKER_FEATURE_0030', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_CALENDARPICKER_FEATURE_0030 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement0030"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('UIComponentPopupBoxCalendarPickerFeatureReplacement0030')); + await show.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_CALENDARPICKER_FEATURE_0030 finish.`); + done(); + }) + it('SUB_ACE_UI_COMPONENT_POPUPBOX_CALENDARPICKER_FEATURE_0040', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_CALENDARPICKER_FEATURE_0040 start.`); + Settings.createWindow("testability/pages/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement0040"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let show = await driver.findComponent(ON.id('UIComponentPopupBoxCalendarPickerFeatureReplacement0040')); + await show.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_CALENDARPICKER_FEATURE_0040 finish.`); + done(); + }) + }) + } diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement.test.ets new file mode 100755 index 00000000..020fcfd1 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement.test.ets @@ -0,0 +1,485 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' +import { Driver, ON } from '@kit.TestKit' + +export default function UIComponentPopupboxMenuStyleEnhancementReplacement() { + + describe('UIComponentPopupboxMenuStyleEnhancementReplacement', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0530 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0530 + * @tc.desc :menu + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0530', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0530 start.`); + Settings.createWindow("testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0530"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('display')); + await button.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0530 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0640 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0640 + * @tc.desc :menu + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0640', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0640 start.`); + Settings.createWindow("testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0640"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('display')); + await button.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0640 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0610 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0610 + * @tc.desc :menu + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0610', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0610 start.`); + Settings.createWindow("testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0610"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('display')); + await button.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0610 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0620 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0620 + * @tc.desc :menu + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0620', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0620 start.`); + Settings.createWindow("testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0620"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('display')); + await button.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0620 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0650 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0650 + * @tc.desc :menu + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0650', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0650 start.`); + Settings.createWindow("testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0650"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('display')); + await button.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0650 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0630 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0630 + * @tc.desc :menu + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0630', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0630 start.`); + Settings.createWindow("testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0630"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('display')); + await button.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0630 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0370 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0370 + * @tc.desc :menu + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0370', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0370 start.`); + Settings.createWindow("testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0370"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('display')); + await button.longClick(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0370 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0380 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0380 + * @tc.desc :menu + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0380', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0380 start.`); + Settings.createWindow("testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0380"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('display')); + await button.longClick(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0380 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0360 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0360 + * @tc.desc :menu + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0360', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0360 start.`); + Settings.createWindow("testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0360"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('display')); + await button.longClick(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0360 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0350 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0350 + * @tc.desc :menu + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0350', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0350 start.`); + Settings.createWindow("testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0350"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('display')); + await button.longClick(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0350 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0400 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0400 + * @tc.desc :menu + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0400', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0400 start.`); + Settings.createWindow("testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0400"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('display')); + await button.longClick(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0400 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0410 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0410 + * @tc.desc :menu + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0410', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0410 start.`); + Settings.createWindow("testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0410"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('display')); + await button.longClick(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0410 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0390 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0390 + * @tc.desc :menu + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0390', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0390 start.`); + Settings.createWindow("testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0390"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('display')); + await button.longClick(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0390 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0420 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0420 + * @tc.desc :menu + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0420', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0420 start.`); + Settings.createWindow("testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0420"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('display')); + await button.longClick(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0420 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0440 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0440 + * @tc.desc :menu + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0440', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0440 start.`); + Settings.createWindow("testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0440"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('display')); + await button.longClick(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0440 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0430 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0430 + * @tc.desc :menu + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0430', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0430 start.`); + Settings.createWindow("testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0430"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('display')); + await button.longClick(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0430 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_1030 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_1030 + * @tc.desc :menu + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_1030', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_1030 start.`); + Settings.createWindow("testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement1030"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('display')); + await button.click(); + await Utils.sleep(1000); + let menu = await driver.findComponent(ON.type('MenuItem')); + await menu.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_1030 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0290 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0290 + * @tc.desc :menu + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0290', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0290 start.`); + Settings.createWindow("testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0290"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('display')); + await button.longClick(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0290 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0290_1 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0290_1 + * @tc.desc :menu + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0290_1', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0290_1 start.`); + Settings.createWindow("testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0290"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let btn = await driver.findComponent(ON.id('noDiv')); + await btn.click(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('display')); + await button.longClick(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0290_1 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0300 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0300 + * @tc.desc :menu + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0300', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0300 start.`); + Settings.createWindow("testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0300"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('display')); + await button.longClick(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0300 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0680 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0680 + * @tc.desc :menu + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0680', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0680 start.`); + Settings.createWindow("testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0680"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('display')); + await button.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0680 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0670 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0670 + * @tc.desc :menu + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0670', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0670 start.`); + Settings.createWindow("testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0670"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('display')); + await button.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0670 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0310 + * @tc.name : SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0310 + * @tc.desc :menu + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0310', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0310 start.`); + Settings.createWindow("testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0310"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('display')); + await button.longClick(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_MENU_STYLE_ENHANCEMENT_0310 finish.`); + done(); + }) + + }) + } diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement.test.ets new file mode 100755 index 00000000..54ca2c52 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement.test.ets @@ -0,0 +1,160 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Driver, ON } from '@kit.TestKit' + +export default function UIComponentUISupportColorReplacement() { + + describe('UIComponentUISupportColorReplacement', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0570 + * @tc.name : SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0570 + * @tc.desc :theme + */ + it('SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0570', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0570 start.`); + Settings.createWindow("testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0570"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('change')); + await button.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0570 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0610 + * @tc.name : SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0610 + * @tc.desc :theme + */ + it('SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0610', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0610 start.`); + Settings.createWindow("testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0610"); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0610 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0600 + * @tc.name : SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0600 + * @tc.desc :theme + */ + it('SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0600', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0600 start.`); + Settings.createWindow("testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0600"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('change')); + await button.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0600 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0630 + * @tc.name : SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0630 + * @tc.desc :theme + */ + it('SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0630', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0630 start.`); + Settings.createWindow("testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0630"); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0630 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0590 + * @tc.name : SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0590 + * @tc.desc :theme + */ + it('SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0590', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0590 start.`); + Settings.createWindow("testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0590"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('change')); + await button.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0590 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0580 + * @tc.name : SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0580 + * @tc.desc :theme + */ + it('SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0580', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0580 start.`); + Settings.createWindow("testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0580"); + await Utils.sleep(1000); + const driver = Driver.create(); + await Utils.sleep(1000); + let button = await driver.findComponent(ON.id('change')); + await button.click(); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0580 finish.`); + done(); + }) + /* + * @tc.number : SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0620 + * @tc.name : SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0620 + * @tc.desc :theme + */ + it('SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0620', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0620 start.`); + Settings.createWindow("testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0620"); + await Utils.sleep(2000); + windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_UISUPPORT_COLOR_0620 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIComponmentCanvasModifierReplacementTest/UIComponmentCanvasModifierReplacement001.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIComponmentCanvasModifierReplacementTest/UIComponmentCanvasModifierReplacement001.test.ets new file mode 100755 index 00000000..11df265b --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIComponmentCanvasModifierReplacementTest/UIComponmentCanvasModifierReplacement001.test.ets @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIComponmentCanvasModifierReplacement001() { + + describe('UIComponmentCanvasModifierReplacement001', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number SUB_ACE_UI_COMPONENT_CANVAS_MODIFIER_1240 + * @tc.name SUB_ACE_UI_COMPONENT_CANVAS_MODIFIER_1240 + * @tc.desc canvas + */ + it('SUB_ACE_UI_COMPONENT_CANVAS_MODIFIER_1240', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_CANVAS_MODIFIER_1240 start.`); + Settings.createWindow("testability/pages/UIComponmentCanvasModifierReplacement/UIComponmentCanvasModifierReplacement1240"); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_CANVAS_MODIFIER_1240 finish.`); + done(); + }) + + }) +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIPopuBoxAlertDialogCalendarPickerReplacementTest/UIPopuBoxAlertDialogCalendarPickerReplacement001.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIPopuBoxAlertDialogCalendarPickerReplacementTest/UIPopuBoxAlertDialogCalendarPickerReplacement001.test.ets new file mode 100755 index 00000000..58edb8ad --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIPopuBoxAlertDialogCalendarPickerReplacementTest/UIPopuBoxAlertDialogCalendarPickerReplacement001.test.ets @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIPopuBoxAlertDialogCalendarPickerReplacement001() { + + describe('UIPopuBoxAlertDialogCalendarPickerReplacement001', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0420 + * @tc.name SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0420 + * @tc.desc AlertDialog test + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0420', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0420 start.`); + let driver: Driver = Driver.create(); + Settings.createWindow("testability/pages/UIPopuBoxAlertDialogCalendarPickerReplacement/UIAlertDialogInterfaceReplacement0420"); + await Utils.sleep(1000); + let button: Component = await driver.findComponent(ON.id('UIAlertDialogInterfaceReplacement0420_button_01')); + await Utils.sleep(1000); + await button.click() + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(1000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_ALERTDIALOG_INTERFACE_0420 finish.`); + done(); + }) + + /* + * @tc.number SUB_ACE_UI_COMPONENT_POPUPBOX_CALENDARPICKER_FEATURE_0050 + * @tc.name SUB_ACE_UI_COMPONENT_POPUPBOX_CALENDARPICKER_FEATURE_0050 + * @tc.desc CalendarPicker test + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_CALENDARPICKER_FEATURE_0050', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_CALENDARPICKER_FEATURE_0050 start.`); + let driver: Driver = Driver.create(); + Settings.createWindow("testability/pages/UIPopuBoxAlertDialogCalendarPickerReplacement/UIPopuBoxCalendarPickerFeatureReplacement0050"); + await Utils.sleep(1000); + let button: Component = await driver.findComponent(ON.id('UIPopuBoxCalendarPickerFeatureReplacement0050_button_01')); + await Utils.sleep(1000); + await button.click() + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(1000); + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_CALENDARPICKER_FEATURE_0050 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIPopuBoxSupportCustomIzationStyleReplacementTest/UIPopuBoxSupportCustomIzationStyleReplacement001.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIPopuBoxSupportCustomIzationStyleReplacementTest/UIPopuBoxSupportCustomIzationStyleReplacement001.test.ets new file mode 100755 index 00000000..986e30c3 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIPopuBoxSupportCustomIzationStyleReplacementTest/UIPopuBoxSupportCustomIzationStyleReplacement001.test.ets @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver, ON } from '@ohos.UiTest' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIPopuBoxSupportCustomIzationStyleReplacement001() { + + describe('UIPopuBoxSupportCustomIzationStyleReplacement001', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number SUB_ACE_UI_COMPONENT_POPUPBOX_PROMPT_SUPPORTCUSTOMIZATIONSTYLE_0830 + * @tc.name SUB_ACE_UI_COMPONENT_POPUPBOX_PROMPT_SUPPORTCUSTOMIZATIONSTYLE_0830 + * @tc.desc MOST_TOP + */ + it('SUB_ACE_UI_COMPONENT_POPUPBOX_PROMPT_SUPPORTCUSTOMIZATIONSTYLE_0830', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_PROMPT_SUPPORTCUSTOMIZATIONSTYLE_0830 start.`); + let driver: Driver = Driver.create(); + Settings.createWindow("testability/pages/UIPopuBoxSupportCustomIzationStyleReplacement/UIPopuBoxSupportCustomIzationStyleReplacement0830"); + await Utils.sleep(500); + let button: Component = await driver.findComponent(ON.id('UIPopuBoxSupportCustomIzationStyle0830_button_01')); + await Utils.sleep(1000); + await button.click() + await Utils.sleep(2000); + await windowSnap.snapShot() + await Utils.sleep(1000) + Logger.info('TEST', `SUB_ACE_UI_COMPONENT_POPUPBOX_PROMPT_SUPPORTCUSTOMIZATIONSTYLE_0830 finish.`); + done(); + }) + + /* + * @tc.number ARKUI_COMPONENTFUNCTION_SPECIALCOMPONENTS_DIALOG_SPECIFICATIONS_HAND_0060 + * @tc.name ARKUI_COMPONENTFUNCTION_SPECIALCOMPONENTS_DIALOG_SPECIFICATIONS_HAND_0060 + * @tc.desc MOST_TOP + */ + it('ARKUI_COMPONENTFUNCTION_SPECIALCOMPONENTS_DIALOG_SPECIFICATIONS_HAND_0060', 0, async (done: Function) => { + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_SPECIALCOMPONENTS_DIALOG_SPECIFICATIONS_HAND_0060 start.`); + let driver: Driver = Driver.create(); + Settings.createWindow("testability/pages/UIPopuBoxSupportCustomIzationStyleReplacement/UIDialogSpeciFicationsHandReplacement0060"); + await Utils.sleep(500) + let button: Component = await driver.findComponent(ON.id('button_01')); + let textInput: Component = await driver.findComponent(ON.id('textInput_01')); + await Utils.sleep(1000); + await button.click() + await Utils.sleep(1000); + await textInput.click() + await Utils.sleep(2000); + await windowSnap.snapShot() + await Utils.sleep(1000) + Logger.info('TEST', `ARKUI_COMPONENTFUNCTION_SPECIALCOMPONENTS_DIALOG_SPECIFICATIONS_HAND_0060 finish.`); + done(); + }) + }) +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIRenderComComponentTest/UIRenderComComponent.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIRenderComComponentTest/UIRenderComComponent.test.ets new file mode 100755 index 00000000..f8490587 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIRenderComComponentTest/UIRenderComComponent.test.ets @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIRenderComComponent() { + + describe('UIRenderComComponent', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number SUB_ACE_UI_RENDER_COM_COMPONENT_0020 + * @tc.name SUB_ACE_UI_RENDER_COM_COMPONENT_0020 + * @tc.desc Web + */ + it('SUB_ACE_UI_RENDER_COM_COMPONENT_0020', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_RENDER_COM_COMPONENT_0020 start.`); + Settings.createWindow("testability/pages/UIRenderComComponent/UIRenderComComponent0020"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let btn = await driver.findComponent(ON.id('btn1')); + await Utils.sleep(1000); + await btn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_RENDER_COM_COMPONENT_0020 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_UI_RENDER_COM_COMPONENT_0030 + * @tc.name SUB_ACE_UI_RENDER_COM_COMPONENT_0030 + * @tc.desc Web + */ + it('SUB_ACE_UI_RENDER_COM_COMPONENT_0030', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_RENDER_COM_COMPONENT_0030 start.`); + Settings.createWindow("testability/pages/UIRenderComComponent/UIRenderComComponent0020"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let btn = await driver.findComponent(ON.id('btn2')); + await Utils.sleep(1000); + await btn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_RENDER_COM_COMPONENT_0030 finish.`); + done(); + }) + }) +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIWebDrawPipelineTest/UIWebDrawPipeline.test.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIWebDrawPipelineTest/UIWebDrawPipeline.test.ets new file mode 100755 index 00000000..b582d2e7 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/UIWebDrawPipelineTest/UIWebDrawPipeline.test.ets @@ -0,0 +1,365 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { afterEach, describe, it } from '@ohos/hypium' +import Settings from '../model/Settings' +import windowSnap from '../model/snapShot' +import Logger from '../model/Logger' +import Utils from '../model/Utils' + +import { Component, Driver ,ON } from '@ohos.UiTest' +import uiAppearance from '@ohos.uiAppearance' + +/* + * Settings.createWindow(config.url): + * 创建窗口,更改窗口基本配置,更改方式详见model/Settings createWindow方法 + * + * windowSnap.snapShot(globalThis.context): + * 窗口截屏&图片文件保存,存储在设备端 + * 存储文件固定,单挑用例执行后覆盖,用于自动化UI对比 + * 支持调试更改文件名为时间戳格式,更改model/snapShot createAndGetFile方法 注释L35,放开L32,L33 + * + * Logger日志使用方法: + * import Logger form './model/Logger' + * Logger.info(TAG,`config = ${config}, err = ${JSON.stringify(exception)}`) + * */ + +export default function UIWebDrawPipeline() { + + describe('UIWebDrawPipeline', () => { + afterEach(async (done: Function) => { + if (Settings.windowClass == undefined) { + return; + } + + Settings.windowClass.destroyWindow((err) => { + if (err.code) { + Logger.error('TEST', `Failed to destroy the window. Cause : ${JSON.stringify(err)}`); + return; + } + Logger.info('TEST', `Succeeded in destroy the window.`); + }) + await Utils.sleep(1000); + done(); + }) + + /* + * @tc.number SUB_ACE_UI_WEB_DRAW_PIPELINE_0010 + * @tc.name SUB_ACE_UI_WEB_DRAW_PIPELINE_0010 + * @tc.desc Web + */ + it('SUB_ACE_UI_WEB_DRAW_PIPELINE_0010', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0010 start.`); + Settings.createWindow("testability/pages/UIWebDrawPipeline/UIWebDrawPipeline0010"); + await Utils.sleep(1000); + await Settings.changeOrientation(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + await Settings.changeOrientation(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0010 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_UI_WEB_DRAW_PIPELINE_0020 + * @tc.name SUB_ACE_UI_WEB_DRAW_PIPELINE_0020 + * @tc.desc Web + */ + it('SUB_ACE_UI_WEB_DRAW_PIPELINE_0020', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0020 start.`); + Settings.createWindow("testability/pages/UIWebDrawPipeline/UIWebDrawPipeline0010"); + await Utils.sleep(1000); + await Settings.changeOrientation(); + await Utils.sleep(2000); + await Settings.changeOrientation(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0020 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_UI_WEB_DRAW_PIPELINE_0030 + * @tc.name SUB_ACE_UI_WEB_DRAW_PIPELINE_0030 + * @tc.desc Web + */ + it('SUB_ACE_UI_WEB_DRAW_PIPELINE_0030', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0030 start.`); + Settings.createWindow("testability/pages/UIWebDrawPipeline/UIWebDrawPipeline0050"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let btn = await driver.findComponent(ON.id('btn3')); + await Utils.sleep(1000); + await btn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0030 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_UI_WEB_DRAW_PIPELINE_0040 + * @tc.name SUB_ACE_UI_WEB_DRAW_PIPELINE_0040 + * @tc.desc Web + */ + it('SUB_ACE_UI_WEB_DRAW_PIPELINE_0040', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0040 start.`); + Settings.createWindow("testability/pages/UIWebDrawPipeline/UIWebDrawPipeline0050"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let btn = await driver.findComponent(ON.id('btn4')); + await Utils.sleep(1000); + await btn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0040 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_UI_WEB_DRAW_PIPELINE_0050 + * @tc.name SUB_ACE_UI_WEB_DRAW_PIPELINE_0050 + * @tc.desc Web + */ + it('SUB_ACE_UI_WEB_DRAW_PIPELINE_0050', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0050 start.`); + Settings.createWindow("testability/pages/UIWebDrawPipeline/UIWebDrawPipeline0050"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let btn = await driver.findComponent(ON.id('btn1')); + await Utils.sleep(1000); + await btn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0050 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_UI_WEB_DRAW_PIPELINE_0060 + * @tc.name SUB_ACE_UI_WEB_DRAW_PIPELINE_0060 + * @tc.desc Web + */ + it('SUB_ACE_UI_WEB_DRAW_PIPELINE_0060', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0060 start.`); + Settings.createWindow("testability/pages/UIWebDrawPipeline/UIWebDrawPipeline0050"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let btn = await driver.findComponent(ON.id('btn1')); + await Utils.sleep(1000); + await btn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0060 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_UI_WEB_DRAW_PIPELINE_0070_1 + * @tc.name SUB_ACE_UI_WEB_DRAW_PIPELINE_0070_1 + * @tc.desc Web + */ + it('SUB_ACE_UI_WEB_DRAW_PIPELINE_0070_1', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0070_1 start.`); + Settings.createWindow("testability/pages/UIWebDrawPipeline/UIWebDrawPipeline0050"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let btn = await driver.findComponent(ON.id('btn5')); + await Utils.sleep(1000); + await btn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0070_1 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_UI_WEB_DRAW_PIPELINE_0070_2 + * @tc.name SUB_ACE_UI_WEB_DRAW_PIPELINE_0070_2 + * @tc.desc Web + */ + it('SUB_ACE_UI_WEB_DRAW_PIPELINE_0070_2', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0070_2 start.`); + Settings.createWindow("testability/pages/UIWebDrawPipeline/UIWebDrawPipeline0050"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let btn = await driver.findComponent(ON.id('btn5')); + await Utils.sleep(1000); + await btn.click();; + await Utils.sleep(1000); + await btn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0070_2 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_UI_WEB_DRAW_PIPELINE_0080 + * @tc.name SUB_ACE_UI_WEB_DRAW_PIPELINE_0080 + * @tc.desc Web + */ + it('SUB_ACE_UI_WEB_DRAW_PIPELINE_0080', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0080 start.`); + Settings.createWindow("testability/pages/UIWebDrawPipeline/UIWebDrawPipeline0010"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + await Utils.homeAndBack(driver); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0080 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_UI_WEB_DRAW_PIPELINE_0090 + * @tc.name SUB_ACE_UI_WEB_DRAW_PIPELINE_0090 + * @tc.desc Web + */ + it('SUB_ACE_UI_WEB_DRAW_PIPELINE_0090', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0090 start.`); + Settings.createWindow("testability/pages/UIWebDrawPipeline/UIWebDrawPipeline0050"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let btn = await driver.findComponent(ON.id('btn6')); + await Utils.sleep(1000); + await btn.click();; + await Utils.sleep(1000); + await btn.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0090 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_UI_WEB_DRAW_PIPELINE_0100 + * @tc.name SUB_ACE_UI_WEB_DRAW_PIPELINE_0100 + * @tc.desc Web + */ + it('SUB_ACE_UI_WEB_DRAW_PIPELINE_0100', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0100 start.`); + Settings.createWindow("testability/pages/UIWebDrawPipeline/UIWebDrawPipeline0050"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let btn1 = await driver.findComponent(ON.id('btn1')); + let btn2 = await driver.findComponent(ON.id('btn3')); + await Utils.sleep(1000); + await btn1.click(); + await Utils.sleep(1000); + await btn2.click(); + await Utils.sleep(1000); + await Settings.changeOrientation(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(1000); + await Settings.changeOrientation(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0100 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_UI_WEB_DRAW_PIPELINE_0110 + * @tc.name SUB_ACE_UI_WEB_DRAW_PIPELINE_0110 + * @tc.desc Web + */ + it('SUB_ACE_UI_WEB_DRAW_PIPELINE_0110', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0110 start.`); + Settings.createWindow("testability/pages/UIWebDrawPipeline/UIWebDrawPipeline0050"); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let btn1 = await driver.findComponent(ON.id('btn2')); + let btn2 = await driver.findComponent(ON.id('btn4')); + await Utils.sleep(1000); + await btn1.click(); + await Utils.sleep(1000); + await btn2.click(); + await Utils.sleep(1000); + await Settings.changeOrientation(); + await Utils.sleep(1000); + await Settings.changeOrientation(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0110 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_UI_WEB_DRAW_PIPELINE_0120 + * @tc.name SUB_ACE_UI_WEB_DRAW_PIPELINE_0120 + * @tc.desc Web + */ + it('SUB_ACE_UI_WEB_DRAW_PIPELINE_0120', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0120 start.`); + Settings.createWindow("testability/pages/UIWebDrawPipeline/UIWebDrawPipeline0050"); + await Utils.sleep(1000); + await Settings.changeOrientation(); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let btn1 = await driver.findComponent(ON.id('btn1')); + let btn2 = await driver.findComponent(ON.id('btn3')); + await Utils.sleep(1000); + await btn1.click(); + await Utils.sleep(1000); + await btn2.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(1000); + await Settings.changeOrientation(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0120 finish.`); + done(); + }) + /* + * @tc.number SUB_ACE_UI_WEB_DRAW_PIPELINE_0130 + * @tc.name SUB_ACE_UI_WEB_DRAW_PIPELINE_0130 + * @tc.desc Web + */ + it('SUB_ACE_UI_WEB_DRAW_PIPELINE_0130', 0, async (done: Function) => { + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0130 start.`); + Settings.createWindow("testability/pages/UIWebDrawPipeline/UIWebDrawPipeline0050"); + await Utils.sleep(1000); + await Settings.changeOrientation(); + await Utils.sleep(1000); + await Settings.changeOrientation(); + await Utils.sleep(1000); + let driver: Driver = Driver.create(); + await Utils.sleep(1000); + let btn1 = await driver.findComponent(ON.id('btn2')); + let btn2 = await driver.findComponent(ON.id('btn4')); + await Utils.sleep(1000); + await btn1.click(); + await Utils.sleep(1000); + await btn2.click(); + await Utils.sleep(2000); + await windowSnap.snapShot(); + await Utils.sleep(2000); + Logger.info('TEST', `SUB_ACE_UI_WEB_DRAW_PIPELINE_0130 finish.`); + done(); + }) + }) +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/model/Utils.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/model/Utils.ets index 7f06aa4d..33496bf7 100644 --- a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/model/Utils.ets +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/test/model/Utils.ets @@ -14,6 +14,8 @@ */ import {Driver , ON} from '@ohos.UiTest' +import Settings from '../model/Settings' +import { KeyCode } from '@kit.InputKit'; export default class Utils { @@ -39,6 +41,20 @@ export default class Utils { } + /** + * The application switches to the desktop and back to the application + * + * @param driver + */ + static async homeAndBack(driver: Driver) { + let currentWindow = await Settings.windowClass; + if (currentWindow) { + await currentWindow.hide(); + await driver.triggerKey(KeyCode.KEYCODE_HOME); + await Utils.sleep(2000); + await currentWindow.showWindow(); + } + } } diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXDraw/DFXDraw0010.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXDraw/DFXDraw0010.ets new file mode 100755 index 00000000..ac56db0f --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXDraw/DFXDraw0010.ets @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { uiObserver as observer } from '@kit.ArkUI' + +@Entry +@Component +struct DFXDraw0010 { + @State text: string = '这是一条很长的测试文本,This is a very long test text。' + @State isShow: boolean = true + @State res: string = 'Scroll测试结果:\n' + @State startRes: string = '' + @State endRes: string = '' + @State scrollRes: string = '' + private scroller: Scroller = new Scroller() + @State isScrollListener: boolean = true; + @State observerRes: string = 'UIObserver结果:\n' + @State observerRes1: string = 'UIObserver callback 1结果:\n' + @State visibVar: Visibility = Visibility.Visible + drawCommand = () => { + console.info("callback 1"); + this.observerRes1 += 'callback 1\n'; + } + + aboutToAppear() { + this.getUIContext().getUIObserver().on('willDraw', (info) => { + console.log('[Test] scrollEvent: ' + JSON.stringify(info)); + this.observerRes += 'willDraw callback\n'; + }) + this.getUIContext().getUIObserver().on('willDraw', this.drawCommand); + } + + build() { + Row() { + Column({ space: 5 }) { + TextInput({ text: 'Text:' + this.text }) + .fontSize(20) + .height(100) + .borderWidth(3) + .width('80%') + .visibility(this.visibVar) + + Text(this.observerRes1) + .fontSize(20) + .textOverflow({ overflow: TextOverflow.Ellipsis }) + .fontColor(Color.Brown) + .width('95%') + .borderWidth(2) + .height(280) + .maxLines(10) + Text(this.observerRes) + .textOverflow({ overflow: TextOverflow.Ellipsis }) + .maxLines(10) + .fontSize(20) + .fontColor(Color.Brown) + .width('95%') + .borderWidth(2) + .height(280) + Row({ space: 5 }) { + Button('切换Text显示').id('DFXDraw0010_btn1') + .onClick(() => { + this.visibVar = (this.visibVar == Visibility.Visible) ? Visibility.None : Visibility.Visible; + }) + Button('解除willDraw').id('DFXDraw0010_btn2') + .onClick(() => { + this.getUIContext().getUIObserver().off('willDraw', this.drawCommand); + this.observerRes1 = 'callback 1 UIObserver 关闭\n'; + }) + Button('解除所有willDraw').id('DFXDraw0010_btn3') + .onClick(() => { + this.getUIContext().getUIObserver().off('willDraw', this.drawCommand); + this.observerRes1 = 'callback 1 UIObserver 关闭\n'; + this.getUIContext().getUIObserver().off('willDraw'); + this.observerRes = 'willDraw UIObserver 关闭\n'; + }) + } + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0010.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0010.ets new file mode 100755 index 00000000..78aca68d --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0010.ets @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct DFXScrollEventObserver0010 { + @State text: string = '这是一条很长的测试文本,This is a very long test text。' + scroller: Scroller = new Scroller() + @State isScrollNext: boolean = false + @State res: string = 'Scroll测试结果:\n' + @State scrollRes: string = '' + @State scrollSnap: ScrollSnapOptions | undefined = undefined + + build() { + Row() { + Column({ space: 10 }) { + Scroll(this.scroller) { + Column({ space: 10 }) { + TextInput({ text: 'Text01' + this.text }).height(100).fontSize(20) + TextInput({ text: 'Text02' + this.text }).height(100).fontSize(20) + TextInput({ text: 'Text03' + this.text }).height(100).fontSize(20) + TextInput({ text: 'Text04' + this.text }).height(100).fontSize(20) + TextInput({ text: 'Text05' + this.text }).height(100).fontSize(20) + TextInput({ text: 'Text06' + this.text }).height(100).fontSize(20) + TextInput({ text: 'Text07' + this.text }).height(100).fontSize(20) + TextInput({ text: 'Text08' + this.text }).height(100).fontSize(20) + TextInput({ text: 'Text09' + this.text }).height(100).fontSize(20) + TextInput({ text: 'Text10' + this.text }).height(100).fontSize(20) + TextInput({ text: 'Text11' + this.text }).height(100).fontSize(20) + TextInput({ text: 'Text12' + this.text }).height(100).fontSize(20) + } + } + .scrollSnap(this.scrollSnap) + .height(300) + .borderWidth(3) + .onScrollStart(() => { + this.res += 'onScrollStart回调咯\n' + }) + .onScrollEnd(() => { + this.res += 'onScrollEnd回调咯\n' + }) + .onScroll((scrollOffset: number, scrollState: ScrollState) => { + this.scrollRes = + 'onScroll回调,{ scrollOffset=' + scrollOffset + + ' }\n'; + }) + + Text(this.res).fontSize(20).fontColor(Color.Brown) + Text(this.scrollRes).fontSize(20).fontColor(Color.Green) + Row({ space: 10 }) { + Button('scroll Page').id('ScrollEventObserver0010_btn2') + .onClick(() => { + this.scroller.scrollPage({ next: true }); + }) + Button('scrollToIndex').id('ScrollEventObserver0010_btn3') + .onClick(() => { + this.scroller.scrollToIndex(10); + }) + Button('scroll 200vp').id('ScrollEventObserver0010_btn4') + .onClick(() => { + this.scroller.scrollBy(0, 200); + }) + } + + Row({ space: 10 }) { + Button('scroll Bottom').id('ScrollEventObserver0010_btn1') + .onClick(() => { + this.scroller.scrollEdge(Edge.Bottom); + }) + + Button('scroll Top').id('ScrollEventObserver0010_btn5') + .onClick(() => { + this.scroller.scrollEdge(Edge.Top); + }) + Button('设置限位滚动模式').id('ScrollEventObserver0010_btn6') + .onClick(() => { + this.scrollSnap = { + snapAlign: ScrollSnapAlign.START, + snapPagination: 200, + enableSnapToStart: true, + enableSnapToEnd: true + } + }) + } + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0020.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0020.ets new file mode 100755 index 00000000..565c6c1b --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0020.ets @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct DFXScrollEventObserver0020 { + @State text: string = '这是一条很长的测试文本,This is a very long test text。' + @State isScrollNext: boolean = false + @State res: string = 'Scroll测试结果:\n' + @State startRes: string = '' + @State endRes: string = '' + @State scrollRes: string = '' + @State dataArray: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; + private scroller: ListScroller = new ListScroller() + @State listChildrenSize: ChildrenMainSize = new ChildrenMainSize(50) + + aboutToAppear() { + // 初始化数据源。 + for (let i = 0; i < 10; i++) { + this.dataArray.push(i) + } + // 前5个item的主轴大小不是默认大小100,因此需要通过ChildrenMainSize通知List。 + this.listChildrenSize.splice(0, 5, [300, 300, 300, 300, 300]) + } + + build() { + Row() { + Column({ space: 10 }) { + List({ space: 12, initialIndex: 0, scroller: this.scroller }) { + ForEach(this.dataArray, (item: number) => { + ListItem() { + Text('Text:' + item) + .width('90%') + .height(item < 5 ? 100 : this.listChildrenSize.childDefaultSize) + .backgroundColor('#FFabcd12') + .borderRadius(24) + .fontSize(16) + .fontWeight(500) + .textAlign(TextAlign.Center) + .borderWidth(1) + } + }, (item: number) => item.toString()) + } + .id('ScrollEventObserver0010') + .height('80%') + .width('100%') + .margin({ top: 12, left: '10%' }) + .onScrollStart(() => { + this.startRes += 'onScrollStart回调咯\n' + }) + .onScrollStop(() => { + this.endRes += 'onScrollStop回调咯\n' + }) + .onScroll((scrollOffset: number, scrollState: ScrollState) => { + this.scrollRes = + 'onScroll回调,{ id=ScrollEventObserver0010 scrollOffset=' + scrollOffset + + ' }\n'; + }) + + Text(this.res + this.startRes + this.scrollRes + this.startRes).fontSize(20).fontColor(Color.Brown) + Button('scroll').id('scroll_btn').onClick(() => { + this.scroller.scrollEdge(Edge.Bottom); + }) + } + .width('100%') + } + .height('50%') + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0030.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0030.ets new file mode 100755 index 00000000..7a94fde5 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0030.ets @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct DFXScrollEventObserver0030 { + @State text: string = '这是一条很长的测试文本,This is a very long test text。' + @State isScrollListener: boolean = true; + @State startRes: string = '' + @State endRes: string = '' + @State scrollRes: string = 'Grid测试结果:\n' + @State observerRes: string = 'UIObserver结果:\\n' + @State numbers: String[] = ['0', '1', '2', '3', '4'] + @State gridPosition: number = 0 //0代表滚动到grid顶部,1代表中间值,2代表滚动到grid底部。 + scroller: Scroller = new Scroller() + + aboutToAppear(): void { + if (this.isScrollListener) { + this.getUIContext().getUIObserver().on('scrollEvent', (info) => { + console.log('[Test] scrollEvent: ' + JSON.stringify(info)); + this.observerRes = JSON.stringify(info); + }) + }else { + console.log('[Test] scrollEvent: UIObserver off'); + } + } + + build() { + Column({ space: 5 }) { + Grid(this.scroller) { + ForEach(this.numbers, (day: string) => { + ForEach(this.numbers, (day: string) => { + GridItem() { + Text(day) + .fontSize(16) + .backgroundColor(0xF9CF93) + .width('100%') + .height(80) + .textAlign(TextAlign.Center) + } + }, (day: string) => day) + }, (day: string) => day) + } + .columnsTemplate('1fr 1fr 1fr 1fr 1fr') + .columnsGap(10) + .rowsGap(10) + .friction(0.6) + .enableScrollInteraction(true) + .supportAnimation(false) + .multiSelectable(false) + .edgeEffect(EdgeEffect.Spring) + .scrollBar(BarState.On) + .scrollBarColor(Color.Grey) + .scrollBarWidth(4) + .width('90%') + .backgroundColor(0xFAEEE0) + .height(300) + .onScroll((scrollOffset: number, scrollState: ScrollState) => { + this.scrollRes = + 'onScroll回调,{ id=ScrollEventObserver0010 scrollOffset=' + scrollOffset + ' }\n'; + }) + .onScrollStart(() => { + this.startRes = 'onScrollStart回调咯\n' + console.info("TEST" + "Grid onScrollStart") + }) + .onScrollStop(() => { + this.endRes = 'onScrollStop回调咯\n' + console.info("TEST" + "Grid onScrollStop") + }) + .onReachStart(() => { + this.gridPosition = 0 + console.info("TEST" + "Grid onReachStart") + }) + .onReachEnd(() => { + this.gridPosition = 2 + console.info("TEST" + "Grid onReachEnd") + }) + + Text(this.startRes + this.endRes) + .fontSize(20) + .fontColor(Color.Brown) + .width('90%') + .borderWidth(2) + .margin({ top: 10 }) + Text(this.observerRes) + .fontSize(20) + .fontColor(Color.Brown) + .width('90%') + .borderWidth(2) + .margin({ top: 10 }) + + Row({ space: 10 }) { + Button('Observer Switch').id('ScrollEventObserver0030_btn1') + .onClick(() => { + this.isScrollListener = (this.isScrollListener) ? false : true; + if (!this.isScrollListener) { + this.getUIContext().getUIObserver().off('scrollEvent'); + this.observerRes = 'UIObserver 关闭'; + } + }) + Button('scroll Bottom').id('ScrollEventObserver0030_btn2') + .onClick(() => { + this.scroller.scrollPage({next:true}); + }) + } + }.width('100%').margin({ top: 5 }) + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0040.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0040.ets new file mode 100755 index 00000000..2a5ab9ad --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0040.ets @@ -0,0 +1,112 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct DFXScrollEventObserver0040 { + @State text: string = '这是一条很长的测试文本,This is a very long test text。' + @State isScrollNext: boolean = false + @State res: string = 'Scroll测试结果:\n' + @State startRes: string = '' + @State endRes: string = '' + @State scrollRes: string = '' + @State dataArray: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; + private scroller: ListScroller = new ListScroller() + @State listChildrenSize: ChildrenMainSize = new ChildrenMainSize(50) + @State isScrollListener: boolean = true; + @State observerRes: string = 'UIObserver结果:\n' + + aboutToAppear() { + if (this.isScrollListener) { + this.getUIContext().getUIObserver().on('scrollEvent', (info) => { + console.log('[Test] scrollEvent: ' + JSON.stringify(info)); + this.observerRes = JSON.stringify(info); + }) + } else { + console.log('[Test] scrollEvent: UIObserver off'); + } + // 初始化数据源。 + for (let i = 0; i < 10; i++) { + this.dataArray.push(i) + } + // 前5个item的主轴大小不是默认大小100,因此需要通过ChildrenMainSize通知List。 + this.listChildrenSize.splice(0, 5, [300, 300, 300, 300, 300]) + } + + build() { + Row() { + Column({ space: 10 }) { + List({ space: 12, initialIndex: 0, scroller: this.scroller }) { + ForEach(this.dataArray, (item: number) => { + ListItem() { + Text('Text:' + item) + .width('90%') + .height(item < 5 ? 100 : this.listChildrenSize.childDefaultSize) + .backgroundColor('#FFabcd12') + .borderRadius(24) + .fontSize(16) + .fontWeight(500) + .textAlign(TextAlign.Center) + .borderWidth(1) + } + }, (item: number) => item.toString()) + } + .id('ScrollEventObserver0010') + .height('50%') + .width('100%') + .margin({ top: 12, left: '10%' }) + .onScrollStart(() => { + this.startRes += 'onScrollStart回调咯\n' + }) + .onScrollStop(() => { + this.endRes += 'onScrollStop回调咯\n' + }) + .onScroll((scrollOffset: number, scrollState: ScrollState) => { + this.scrollRes = + 'onScroll回调,{ id=ScrollEventObserver0010 scrollOffset=' + scrollOffset + ' }\n'; + }) + + Text(this.startRes + this.endRes) + .fontSize(20) + .fontColor(Color.Brown) + .width('90%') + .borderWidth(2) + .margin({ top: 10 }) + Text(this.observerRes) + .fontSize(20) + .fontColor(Color.Brown) + .width('90%') + .borderWidth(2) + .margin({ top: 10 }) + Row({ space: 10 }) { + Button('Observer Switch').id('ScrollEventObserver0040_btn1') + .onClick(() => { + this.isScrollListener = (this.isScrollListener) ? false : true; + if (!this.isScrollListener) { + this.getUIContext().getUIObserver().off('scrollEvent'); + this.observerRes = 'UIObserver 关闭' + } + }) + Button('scroll Bottom').id('ScrollEventObserver0040_btn2') + .onClick(() => { + this.scroller.scrollEdge(Edge.Bottom); + }) + } + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0050.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0050.ets new file mode 100755 index 00000000..dd411061 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0050.ets @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { uiObserver as observer } from '@kit.ArkUI' + +@Entry +@Component +struct DFXScrollEventObserver0050 { + @State text: string = '这是一条很长的测试文本,This is a very long test text。' + @State isScrollNext: boolean = false + @State res: string = 'Scroll测试结果:\n' + @State startRes: string = '' + @State endRes: string = '' + @State scrollRes: string = '' + private scroller: Scroller = new Scroller() + @State isScrollListener: boolean = true; + @State observerRes: string = 'UIObserver结果:\n' + + aboutToAppear() { + if (this.isScrollListener) { + this.getUIContext().getUIObserver().on('scrollEvent', (info) => { + console.log('[Test] scrollEvent: ' + JSON.stringify(info)); + this.observerRes = JSON.stringify(info); + }) + } else { + console.log('[Test] scrollEvent: UIObserver off'); + } + } + + build() { + Row() { + Column({ space: 10 }) { + Scroll(this.scroller) { + Column({ space: 10 }) { + TextInput({ text: 'Text01' + this.text }).height(100).fontSize(20) + TextInput({ text: 'Text02' + this.text }).height(100).fontSize(20) + TextInput({ text: 'Text03' + this.text }).height(100).fontSize(20) + TextInput({ text: 'Text04' + this.text }).height(100).fontSize(20) + } + }.height(300).borderWidth(3) + .onScrollStart(() => { + this.startRes += 'onScrollStart回调咯\n' + }) + .onScrollStop(() => { + this.endRes += 'onScrollStop回调咯\n' + }) + .onScroll((scrollOffset: number, scrollState: ScrollState) => { + this.scrollRes = + 'onScroll回调,{ scrollOffset=' + scrollOffset + ' }\n'; + }) + + Text(this.startRes + this.endRes) + .fontSize(20) + .fontColor(Color.Brown) + .width('90%') + .borderWidth(2) + .margin({ top: 10 }) + Text(this.observerRes) + .fontSize(20) + .fontColor(Color.Brown) + .width('90%') + .borderWidth(2) + .margin({ top: 10 }) + Row({ space: 10 }) { + Button('Observer Switch').id('ScrollEventObserver0050_btn1') + .onClick(() => { + this.isScrollListener = (this.isScrollListener) ? false : true; + if (!this.isScrollListener) { + this.getUIContext().getUIObserver().off('scrollEvent'); + this.observerRes = 'UIObserver 关闭'; + } + }) + Button('scroll Bottom').id('ScrollEventObserver0050_btn2') + .onClick(() => { + this.scroller.scrollEdge(Edge.Bottom); + }) + } + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0060.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0060.ets new file mode 100755 index 00000000..6afcfaa0 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0060.ets @@ -0,0 +1,151 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { WaterFlowDataSource } from './WaterFlowDataSource' + +@Entry +@Component +struct DFXScrollEventObserver0060 { + @State text: string = '这是一条很长的测试文本,This is a very long test text。' + @State isScrollNext: boolean = false + @State res: string = 'Scroll测试结果:\n' + @State startRes: string = '' + @State endRes: string = '' + @State scrollRes: string = '' + @State isScrollListener: boolean = true; + @State observerRes: string = 'UIObserver结果:\n' + + + @State minSize: number = 80 + @State maxSize: number = 180 + @State fontSize: number = 24 + @State colors: number[] = [0xFFC0CB, 0xDA70D6, 0x6B8E23, 0x6A5ACD, 0x00FFFF, 0x00FF7F] + scroller: Scroller = new Scroller() + dataSource: WaterFlowDataSource = new WaterFlowDataSource() + private itemWidthArray: number[] = [] + private itemHeightArray: number[] = [] + + // 计算FlowItem宽/高 + getSize() { + return 100; + } + + // 设置FlowItem的宽/高数组 + setItemSizeArray() { + for (let i = 0; i < 100; i++) { + this.itemWidthArray.push(this.getSize()) + this.itemHeightArray.push(this.getSize()) + } + } + + aboutToAppear() { + this.setItemSizeArray(); + if (this.isScrollListener) { + this.getUIContext().getUIObserver().on('scrollEvent', (info) => { + console.log('[Test] scrollEvent: ' + JSON.stringify(info)); + this.observerRes = JSON.stringify(info); + }) + } else { + console.log('[Test] scrollEvent: UIObserver off'); + } + } + + @Builder + itemFoot() { + Column() { + Text(`Footer`) + .fontSize(10) + .backgroundColor(Color.Red) + .width(50) + .height(50) + .align(Alignment.Center) + .margin({ top: 2 }) + } + } + + build() { + Row() { + Column({ space: 10 }) { + WaterFlow({scroller:this.scroller}) { + LazyForEach(this.dataSource, (item: number) => { + FlowItem() { + Column() { + Text("N" + item).fontSize(12).height('16') + } + } + .onAppear(() => { + // 即将触底时提前增加数据 + if (item + 20 == this.dataSource.totalCount()) { + for (let i = 0; i < 100; i++) { + this.dataSource.addLastItem() + } + } + }) + .width('100%') + .height(this.itemHeightArray[item % 100]) + .backgroundColor(this.colors[item % 5]) + }, (item: string) => item) + } + .columnsTemplate("1fr 1fr") + .columnsGap(10) + .rowsGap(5) + .backgroundColor(0xFAEEE0) + .width('100%') + .height('50%') + .onReachStart(() => { + console.info('waterFlow reach start') + }) + .onScrollStart(() => { + this.startRes += 'onScrollStart回调咯\n' + }) + .onScrollStop(() => { + this.endRes += 'onScrollStop回调咯\n' + }) + .onScroll((scrollOffset: number, scrollState: ScrollState) => { + this.scrollRes = + 'onScroll回调,{ id=ScrollEventObserver0010 scrollOffset=' + scrollOffset +' }\n'; + }) + + Text(this.startRes + this.endRes) + .fontSize(20) + .fontColor(Color.Brown) + .width('90%') + .borderWidth(2) + .margin({ top: 10 }) + Text(this.observerRes) + .fontSize(20) + .fontColor(Color.Brown) + .width('90%') + .borderWidth(2) + .margin({ top: 10 }) + Row({ space: 10 }) { + Button('Observer Switch').id('ScrollEventObserver0060_btn1') + .onClick(() => { + this.isScrollListener = (this.isScrollListener) ? false : true; + if (!this.isScrollListener) { + this.getUIContext().getUIObserver().off('scrollEvent'); + this.observerRes = 'UIObserver 关闭'; + } + }) + Button('scroll Bottom').id('ScrollEventObserver0060_btn2') + .onClick(() => { + this.scroller.scrollEdge(Edge.Bottom); + }) + } + } + .width('100%') + } + .height('95%') + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0090.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0090.ets new file mode 100755 index 00000000..564da42f --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0090.ets @@ -0,0 +1,118 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct DFXScrollEventObserver0090 { + @State text: string = '这是一条很长的测试文本,This is a very long test text。' + @State isScrollNext: boolean = false + @State res: string = 'Scroll测试结果:\n' + @State startRes: string = '' + @State endRes: string = '' + @State scrollRes: string = '' + @State dataArray: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; + private scroller: Scroller = new Scroller() + @State isScrollListener: boolean = true; + @State observerRes: string = 'UIObserver结果:\n' + @State alignListItem: ListItemAlign = ListItemAlign.Start + + aboutToAppear() { + if (this.isScrollListener) { + this.getUIContext().getUIObserver().on('scrollEvent', (info) => { + console.log('[Test] scrollEvent: ' + JSON.stringify(info)); + this.observerRes = JSON.stringify(info); + }) + } else { + console.log('[Test] scrollEvent: UIObserver off'); + } + // 初始化数据源。 + for (let i = 0; i < 20; i++) { + this.dataArray.push(i) + } + } + + build() { + Column({space:10}) { + Row() { + List({ space: 20, initialIndex: 3, scroller: this.scroller }) { + ForEach(this.dataArray, (item: number) => { + ListItem() { + Text('Text:' + item) + .width(100) + .height('90%') + .backgroundColor('#FFabcd12') + .borderRadius(24) + .fontSize(16) + .fontWeight(500) + .textAlign(TextAlign.Center) + .borderWidth(1) + } + .borderRadius(10).backgroundColor(0xFFFFFF) + .width(100) + .height('90%') + }, (item: number) => JSON.stringify(item)) + } + .chainAnimation(true) + .edgeEffect(EdgeEffect.Spring) + .listDirection(Axis.Horizontal) + .height('50%') + .width('100%') + .scrollSnapAlign(ScrollSnapAlign.CENTER) + .borderRadius(10) + .backgroundColor(0x12aa45) + .onScrollStart(() => { + this.startRes += 'onScrollStart回调咯\n' + }) + .onScrollStop(() => { + this.endRes += 'onScrollStop回调咯\n' + }) + .onScroll((scrollOffset: number, scrollState: ScrollState) => { + this.scrollRes = + 'onScroll回调,{ id=ScrollEventObserver0010 scrollOffset=' + scrollOffset +' }\n'; + }) + } + .width('100%') + .height('50%') + .padding({ top: 10 }) + + Text(this.startRes + this.endRes) + .fontSize(20) + .fontColor(Color.Brown) + .width('90%') + .borderWidth(2) + .margin({ top: 10 }) + Text(this.observerRes) + .fontSize(20) + .fontColor(Color.Brown) + .width('90%') + .borderWidth(2) + .margin({ top: 10 }) + Row({ space: 10 }) { + Button('Observer Switch').id('ScrollEventObserver0090_btn1') + .onClick(() => { + this.isScrollListener = (this.isScrollListener) ? false : true; + if (!this.isScrollListener) { + this.getUIContext().getUIObserver().off('scrollEvent'); + this.observerRes = 'UIObserver 关闭' + } + }) + Button('scroll End').id('ScrollEventObserver0090_btn2') + .onClick(() => { + this.scroller.scrollEdge(Edge.End); + }) + } + }.width('100%').height('100%').padding({ top: 5 }) + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0100.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0100.ets new file mode 100755 index 00000000..3009c5fa --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0100.ets @@ -0,0 +1,114 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct DFXScrollEventObserver0100 { + @State text: string = '这是一条很长的测试文本,This is a very long test text。' + @State isScrollNext: boolean = false + @State res: string = 'Scroll测试结果:\n' + @State startRes: string = '' + @State endRes: string = '' + @State scrollRes: string = '' + @State dataArray: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; + private scroller: ListScroller = new ListScroller() + @State listChildrenSize: ChildrenMainSize = new ChildrenMainSize(50) + @State isScrollListener: boolean = true; + @State observerRes: string = 'UIObserver结果:\n' + + aboutToAppear() { + if (this.isScrollListener) { + this.getUIContext().getUIObserver().on('scrollEvent', (info) => { + console.log('[Test] scrollEvent: ' + JSON.stringify(info)); + this.observerRes = JSON.stringify(info)+'\n'; + }) + } else { + console.log('[Test] scrollEvent: UIObserver off'); + } + // 初始化数据源。 + for (let i = 0; i < 10; i++) { + this.dataArray.push(i) + } + // 前5个item的主轴大小不是默认大小100,因此需要通过ChildrenMainSize通知List。 + this.listChildrenSize.splice(0, 5, [300, 300, 300, 300, 300]) + } + + build() { + Row() { + Column({ space: 10 }) { + List({ space: 12, initialIndex: 0, scroller: this.scroller }) { + ForEach(this.dataArray, (item: number) => { + ListItem() { + Text('Text:' + item) + .width('90%') + .height(item < 5 ? 100 : this.listChildrenSize.childDefaultSize) + .backgroundColor('#FFabcd12') + .borderRadius(24) + .fontSize(16) + .fontWeight(500) + .textAlign(TextAlign.Center) + .borderWidth(1) + } + }, (item: number) => item.toString()) + } + .id('ScrollEventObserver0010') + .height('60%') + .width('100%') + .margin({ top: 12, left: '10%' }) + .onScrollStart(() => { + this.startRes += 'onScrollStart回调咯\n'; + this.getUIContext().getUIObserver().off('scrollEvent'); + this.observerRes += ' ScrollStart开始了,UIObserver 关闭'; + }) + .onScrollStop(() => { + this.endRes += 'onScrollStop回调咯\n' + }) + .onScroll((scrollOffset: number, scrollState: ScrollState) => { + this.scrollRes = + 'onScroll回调,{ id=ScrollEventObserver0010 scrollOffset=' + scrollOffset + ' }\n'; + }) + + Text(this.startRes + this.endRes) + .fontSize(20) + .fontColor(Color.Brown) + .width('90%') + .borderWidth(2) + .margin({ top: 10 }) + Text(this.observerRes) + .fontSize(20) + .fontColor(Color.Brown) + .width('90%') + .borderWidth(2) + .margin({ top: 10 }) + Row({ space: 10 }) { + Button('Observer Switch').id('ScrollEventObserver0100_btn1') + .onClick(() => { + this.isScrollListener = (this.isScrollListener) ? false : true; + if (!this.isScrollListener) { + this.getUIContext().getUIObserver().off('scrollEvent'); + this.observerRes = 'UIObserver 关闭'+'\n';; + } + }) + Button('scroll Bottom').id('ScrollEventObserver0100_btn2') + .onClick(() => { + this.scroller.scrollEdge(Edge.Bottom); + }) + } + } + .width('100%') + } + .height('90%') + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0110.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0110.ets new file mode 100755 index 00000000..9ab83fac --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0110.ets @@ -0,0 +1,160 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { WaterFlowDataSource } from './WaterFlowDataSource' + +@Entry +@Component +struct DFXScrollEventObserver0110 { + @State text: string = '这是一条很长的测试文本,This is a very long test text。' + @State isScrollNext: boolean = false + @State res: string = 'Scroll测试结果:\n' + @State startRes: string = '' + @State endRes: string = '' + @State scrollRes: string = '' + @State isScrollListener: boolean = true; + @State observerRes: string = 'UIObserver结果:\n' + + + @State minSize: number = 80 + @State maxSize: number = 180 + @State fontSize: number = 24 + @State colors: number[] = [0xFFC0CB, 0xDA70D6, 0x6B8E23, 0x6A5ACD, 0x00FFFF, 0x00FF7F] + scroller: Scroller = new Scroller() + dataSource: WaterFlowDataSource = new WaterFlowDataSource() + private itemWidthArray: number[] = [] + private itemHeightArray: number[] = [] + + // 计算FlowItem宽/高 + getSize() { + let ret = Math.floor(Math.random() * this.maxSize) + return 100; + } + + // 设置FlowItem的宽/高数组 + setItemSizeArray() { + for (let i = 0; i < 100; i++) { + this.itemWidthArray.push(this.getSize()) + this.itemHeightArray.push(this.getSize()) + } + } + + aboutToAppear() { + this.setItemSizeArray(); + if (this.isScrollListener) { + this.getUIContext().getUIObserver().on('scrollEvent', (info) => { + console.log('[Test] scrollEvent: ' + JSON.stringify(info)); + this.observerRes = JSON.stringify(info)+'\n';; + }) + } else { + console.log('[Test] scrollEvent: UIObserver off'); + } + } + + @Builder + itemFoot() { + Column() { + Text(`Footer`) + .fontSize(10) + .backgroundColor(Color.Red) + .width(50) + .height(50) + .align(Alignment.Center) + .margin({ top: 2 }) + } + } + + build() { + Row() { + Column({ space: 10 }) { + WaterFlow({scroller:this.scroller}) { + LazyForEach(this.dataSource, (item: number) => { + FlowItem() { + Column() { + Text("N" + item).fontSize(12).height('16') + } + } + .onAppear(() => { + // 即将触底时提前增加数据 + if (item + 20 == this.dataSource.totalCount()) { + for (let i = 0; i < 100; i++) { + this.dataSource.addLastItem() + } + } + }) + .width('100%') + .height(this.itemHeightArray[item % 100]) + .backgroundColor(this.colors[item % 5]) + }, (item: string) => item) + } + .columnsTemplate("1fr 1fr") + .columnsGap(10) + .rowsGap(5) + .backgroundColor(0xFAEEE0) + .width('100%') + .height('50%') + .onReachStart(() => { + console.info('waterFlow reach start') + }) + .onScrollFrameBegin((offset: number, state: ScrollState) => { + console.info('waterFlow scrollFrameBegin offset: ' + offset + ' state: ' + state.toString()) + return { offsetRemain: offset } + }) + .onScrollStart(() => { + this.startRes += 'onScrollStart回调咯\n'; + this.getUIContext().getUIObserver().on('scrollEvent', (info) => { + console.log('[Test] scrollEvent: ' + JSON.stringify(info)); + this.observerRes += 'ScrollStart开始了,UIObserver又打开了, 信息是\n'+JSON.stringify(info); + }) + }) + .onScrollStop(() => { + this.endRes += 'onScrollStop回调咯\n' + }) + .onScroll((scrollOffset: number, scrollState: ScrollState) => { + this.scrollRes = + 'onScroll回调,{ id=ScrollEventObserver0010 scrollOffset=' + scrollOffset + ' }\n'; + }) + + Text(this.startRes + this.endRes) + .fontSize(20) + .fontColor(Color.Brown) + .width('90%') + .borderWidth(2) + .margin({ top: 10 }) + Text(this.observerRes) + .fontSize(20) + .fontColor(Color.Brown) + .width('90%') + .borderWidth(2) + .margin({ top: 10 }) + Row({ space: 10 }) { + Button('Observer Switch').id('ScrollEventObserver0110_btn1') + .onClick(() => { + this.isScrollListener = (this.isScrollListener) ? false : true; + if (!this.isScrollListener) { + this.getUIContext().getUIObserver().off('scrollEvent'); + this.observerRes = 'UIObserver 关闭'+'\n';; + } + }) + Button('scroll Bottom').id('ScrollEventObserver0110_btn2') + .onClick(() => { + this.scroller.scrollEdge(Edge.Bottom); + }) + } + } + .width('100%') + } + .height('95%') + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0140.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0140.ets new file mode 100755 index 00000000..04f766f3 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0140.ets @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct DFXScrollEventObserver0050 { + @State text: string = '这是一条很长的测试文本,This is a very long test text。' + @State isScrollNext: boolean = false + @State res: string = 'Scroll测试结果:\n' + @State startRes: string = '' + @State endRes: string = '' + @State scrollRes: string = '' + private scroller: Scroller = new Scroller() + @State isScrollListener: boolean = true; + @State observerRes: string = 'UIObserver结果:\n' + + aboutToAppear() { + if (this.isScrollListener) { + this.getUIContext().getUIObserver().on('scrollEvent', (info) => { + console.log('[Test] scrollEvent: ' + JSON.stringify(info)); + this.observerRes = JSON.stringify(info); + }) + } else { + console.log('[Test] scrollEvent: UIObserver off'); + } + } + + build() { + Row() { + Column({ space: 10 }) { + Scroll(this.scroller) { + Column({ space: 10 }) { + TextInput({ text: 'Text01' + this.text }).height(100).fontSize(20) + TextInput({ text: 'Text02' + this.text }).height(100).fontSize(20) + TextInput({ text: 'Text03' + this.text }).height(100).fontSize(20) + TextInput({ text: 'Text04' + this.text }).height(100).fontSize(20) + TextInput({ text: 'Text05' + this.text }).height(100).fontSize(20) + TextInput({ text: 'Text06' + this.text }).height(100).fontSize(20) + TextInput({ text: 'Text07' + this.text }).height(100).fontSize(20) + TextInput({ text: 'Text08' + this.text }).height(100).fontSize(20) + } + }.height(300).borderWidth(3) + .onScrollStart(() => { + this.startRes += 'onScrollStart回调咯\n' + }) + .onScrollStop(() => { + this.endRes += 'onScrollStop回调咯\n' + }) + .onScroll((scrollOffset: number, scrollState: ScrollState) => { + this.scrollRes = + 'onScroll回调,{ scrollOffset=' + scrollOffset + ' }\n'; + }) + + Text(this.startRes + this.endRes) + .fontSize(20) + .fontColor(Color.Brown) + .width('90%') + .borderWidth(2) + .margin({ top: 10 }) + Text(this.observerRes) + .fontSize(20) + .fontColor(Color.Brown) + .width('90%') + .borderWidth(2) + .margin({ top: 10 }) + Row({ space: 10 }) { + Button('Observer Switch').id('ScrollEventObserver0140_btn1') + .onClick(() => { + this.isScrollListener = (this.isScrollListener) ? false : true; + if (!this.isScrollListener) { + this.getUIContext().getUIObserver().off('scrollEvent'); + this.observerRes = 'UIObserver 关闭'; + } + }) + Button('scroll Bottom').id('ScrollEventObserver0140_btn2') + .onClick(() => { + this.scroller.scrollEdge(Edge.Bottom); + }) + } + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/WaterFlowDataSource.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/WaterFlowDataSource.ets new file mode 100755 index 00000000..0f370723 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/DFXScrollEventObserver/WaterFlowDataSource.ets @@ -0,0 +1,142 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// 实现IDataSource接口的对象,用于瀑布流组件加载数据 +export class WaterFlowDataSource implements IDataSource { + private dataArray: number[] = [] + private listeners: DataChangeListener[] = [] + + constructor() { + for (let i = 0; i < 100; i++) { + this.dataArray.push(i) + } + } + + // 获取索引对应的数据 + public getData(index: number): number { + return this.dataArray[index] + } + + // 通知控制器数据重新加载 + notifyDataReload(): void { + this.listeners.forEach(listener => { + listener.onDataReloaded() + }) + } + + // 通知控制器数据增加 + notifyDataAdd(index: number): void { + this.listeners.forEach(listener => { + listener.onDataAdd(index) + }) + } + + // 通知控制器数据变化 + notifyDataChange(index: number): void { + this.listeners.forEach(listener => { + listener.onDataChange(index) + }) + } + + // 通知控制器数据删除 + notifyDataDelete(index: number): void { + this.listeners.forEach(listener => { + listener.onDataDelete(index) + }) + } + + // 通知控制器数据位置变化 + notifyDataMove(from: number, to: number): void { + this.listeners.forEach(listener => { + listener.onDataMove(from, to) + }) + } + + //通知控制器数据批量修改 + notifyDatasetChange(operations: DataOperation[]): void { + this.listeners.forEach(listener => { + listener.onDatasetChange(operations); + }) + } + + // 获取数据总数 + public totalCount(): number { + return this.dataArray.length + } + + // 注册改变数据的控制器 + registerDataChangeListener(listener: DataChangeListener): void { + if (this.listeners.indexOf(listener) < 0) { + this.listeners.push(listener) + } + } + + // 注销改变数据的控制器 + unregisterDataChangeListener(listener: DataChangeListener): void { + const pos = this.listeners.indexOf(listener) + if (pos >= 0) { + this.listeners.splice(pos, 1) + } + } + + // 增加数据 + public add1stItem(): void { + this.dataArray.splice(0, 0, this.dataArray.length) + this.notifyDataAdd(0) + } + + // 在数据尾部增加一个元素 + public addLastItem(): void { + this.dataArray.splice(this.dataArray.length, 0, this.dataArray.length) + this.notifyDataAdd(this.dataArray.length - 1) + } + + // 在指定索引位置增加一个元素 + public addItem(index: number): void { + this.dataArray.splice(index, 0, this.dataArray.length) + this.notifyDataAdd(index) + } + + // 删除第一个元素 + public delete1stItem(): void { + this.dataArray.splice(0, 1) + this.notifyDataDelete(0) + } + + // 删除第二个元素 + public delete2ndItem(): void { + this.dataArray.splice(1, 1) + this.notifyDataDelete(1) + } + + // 删除最后一个元素 + public deleteLastItem(): void { + this.dataArray.splice(-1, 1) + this.notifyDataDelete(this.dataArray.length) + } + + // 在指定索引位置删除一个元素 + public deleteItem(index: number): void { + this.dataArray.splice(index, 1) + this.notifyDataDelete(index) + } + + // 重新加载数据 + public reload(): void { + this.dataArray.splice(1, 1) + this.dataArray.splice(3, 2) + this.notifyDataReload() + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/SubAceStatusManagerDataDotting/SubAceStatusManagerDataDotting0010.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/SubAceStatusManagerDataDotting/SubAceStatusManagerDataDotting0010.ets new file mode 100755 index 00000000..ef45ff99 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/SubAceStatusManagerDataDotting/SubAceStatusManagerDataDotting0010.ets @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct SubAceStatusManagerDataDotting0010 { + private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + + build() { + Column() { + List({ space: 20, initialIndex: 0 }) { + ForEach(this.arr, (item: number) => { + ListItem() { + Image('blue_icon.png') + .width('100%') + .height(100) + .backgroundColor(Color.Blue) + } + }, (item: string) => item) + }.width('90%') + .id('list') + .scrollBar(BarState.Off) + }.width('100%').height('100%').backgroundColor(0xDCDCDC).padding({ top: 5 }) + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationCustomTransitionInterface/UIAnimationCustomTransitionInterface0050.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationCustomTransitionInterface/UIAnimationCustomTransitionInterface0050.ets new file mode 100755 index 00000000..b5b5c772 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationCustomTransitionInterface/UIAnimationCustomTransitionInterface0050.ets @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAnimationCustomTransitionInterface0050 { + @State message: string = 'test change TextValue'; + + build() { + Column({ space: 10 }) { + Text(this.message) + .onClick(() => { + this.message = 'test change TextValue , test change TextValue'; + }).animation({ + duration: 2000, + curve: Curve.EaseOut, + iterations: 1, + }) + .id('UIAnimationCustomTransitionInterface0050_button_001') + + }.width('100%') + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0020.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0020.ets new file mode 100755 index 00000000..23ae43c3 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0020.ets @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAnimationParticleOption0020 { + build() { + Stack() { + Text('point & radius: 0') + .width(300).height(300).backgroundColor(Color.Black).fontColor(Color.Blue) + Particle({ + particles: [ + { + emitter: { + particle: { + type: ParticleType.POINT, //粒子类型 + config: { + radius: 0//圆点半径 + }, + count: 500, //粒子总数 + lifetime: 10000//粒子生命周期,单位ms + }, + emitRate: 10, //每秒发射粒子数 + position: [0, 0], + shape: ParticleEmitterShape.RECTANGLE//发射器形状 + } + }] + }).width(300).height(300) + }.width("100%").height("100%").align(Alignment.Center) + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0040.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0040.ets new file mode 100755 index 00000000..b8dc36ff --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0040.ets @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAnimationParticleOption0040 { + build() { + Stack() { + Text('point & radius: -10') + .width(300).height(300).backgroundColor(Color.Black).fontColor(Color.Blue) + Particle({ + particles: [ + { + emitter: { + particle: { + type: ParticleType.POINT, //粒子类型 + config: { + radius: -10//圆点半径 + }, + count: 500, //粒子总数 + lifetime: 10000//粒子生命周期,单位ms + }, + position: [0, 0], + shape: ParticleEmitterShape.RECTANGLE//发射器形状 + } + }] + }).width(300).height(300) + }.width("100%").height("100%").align(Alignment.Center) + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0060.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0060.ets new file mode 100755 index 00000000..0f7da03e --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0060.ets @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAnimationParticleOption0060 { + build() { + Stack() { + Text('point & radius: undefined') + .width(300).height(300).backgroundColor(Color.Black).fontColor(Color.Blue) + Particle({ + particles: [ + { + emitter: { + particle: { + type: ParticleType.POINT, //粒子类型 + config: { + radius: undefined//圆点半径 + }, + count: 500, //粒子总数 + lifetime: 10000//粒子生命周期,单位ms + }, + emitRate: 10, //每秒发射粒子数 + position: [0, 0], + shape: ParticleEmitterShape.RECTANGLE//发射器形状 + } + }] + }).width(300).height(300) + }.width("100%").height("100%").align(Alignment.Center) + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0090.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0090.ets new file mode 100755 index 00000000..9e38a617 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0090.ets @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAnimationParticleOption0090 { + build() { + Stack() { + Text('image & size: [-10, -10]') + .width(300).height(300).backgroundColor(Color.Pink).fontColor(Color.Blue) + Particle({ + particles: [ + { + emitter: { + particle: { + type: ParticleType.IMAGE, //粒子类型 + config: { + src: 'text_zheng.png', + size: [0, 0] + }, + count: 500, //粒子总数 + lifetime: 10000//粒子生命周期,单位ms + }, + emitRate: 10, //每秒发射粒子数 + position: [-10, -10], + shape: ParticleEmitterShape.RECTANGLE//发射器形状 + } + }] + }).width(300).height(300) + }.width("100%").height("100%").align(Alignment.Center) + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0110.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0110.ets new file mode 100755 index 00000000..dfe9ba01 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0110.ets @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAnimationParticleOption0110 { + build() { + Stack() { + Text('image & size: [10, undefined]') + .width(300).height(300).backgroundColor(Color.Pink).fontColor(Color.Blue) + Particle({ + particles: [ + { + emitter: { + particle: { + type: ParticleType.IMAGE, //粒子类型 + config: { + src: 'text_zheng.png', + size: [10, undefined] + }, + count: 500, //粒子总数 + lifetime: 10000//粒子生命周期,单位ms + }, + emitRate: 10, //每秒发射粒子数 + position: [-10, -10], + shape: ParticleEmitterShape.RECTANGLE//发射器形状 + } + }] + }).width(300).height(300) + }.width("100%").height("100%").align(Alignment.Center) + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0130.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0130.ets new file mode 100755 index 00000000..30b50075 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0130.ets @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAnimationParticleOption0130 { + build() { + Stack() { + Text(' count = 0') + .width(300).height(300).backgroundColor(Color.Pink).fontColor(Color.Blue) + Particle({ + particles: [ + { + emitter: { + particle: { + type: ParticleType.POINT, //粒子类型 + config: { + radius: 10 + }, + count: 0, //粒子总数 + lifetime: 10000//粒子生命周期,单位ms + }, + position: [-10, -10], + shape: ParticleEmitterShape.RECTANGLE//发射器形状 + } + }] + }).width(300).height(300) + }.width("100%").height("100%").align(Alignment.Center) + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0170.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0170.ets new file mode 100755 index 00000000..cb03c778 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0170.ets @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAnimationParticleOption0170 { + build() { + Stack() { + Text('point & count: -2') + .width(300).height(300).backgroundColor(Color.Pink).fontColor(Color.Blue) + Particle({ + particles: [ + { + emitter: { + particle: { + type: ParticleType.POINT, //粒子类型 + config: { + radius: 10 + }, + count: -2, //粒子总数 + lifetime: 10000//粒子生命周期,单位ms + }, + emitRate: 100, //每秒发射粒子数 + shape: ParticleEmitterShape.RECTANGLE//发射器形状 + } + }] + }).width(300).height(300) + }.width("100%").height("100%").align(Alignment.Center) + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0180.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0180.ets new file mode 100755 index 00000000..5baf0194 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0180.ets @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAnimationParticleOption0180 { + build() { + Stack() { + Text('point & count: -0.5') + .width(300).height(300).backgroundColor(Color.Pink).fontColor(Color.Blue) + Particle({ + particles: [ + { + emitter: { + particle: { + type: ParticleType.POINT, //粒子类型 + config: { + radius: 10 + }, + count: -0.5, //粒子总数 + lifetime: 10000//粒子生命周期,单位ms + }, + emitRate: 100, //每秒发射粒子数 + shape: ParticleEmitterShape.RECTANGLE//发射器形状 + } + }] + }).width(300).height(300) + }.width("100%").height("100%").align(Alignment.Center) + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0190.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0190.ets new file mode 100755 index 00000000..31df1cd7 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0190.ets @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAnimationParticleOption0190 { + build() { + Stack() { + Text('count = null') + .width(300).height(300).backgroundColor(Color.Pink).fontColor(Color.Blue) + Particle({ + particles: [ + { + emitter: { + particle: { + type: ParticleType.POINT, //粒子类型 + config: { + radius: 10 + }, + count: null, //粒子总数 + lifetime: 10000//粒子生命周期,单位ms + }, + position: [10, 10], + shape: ParticleEmitterShape.RECTANGLE//发射器形状 + } + }] + }).width(300).height(300) + }.width("100%").height("100%").align(Alignment.Center) + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0200.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0200.ets new file mode 100755 index 00000000..02997063 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0200.ets @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAnimationParticleOption0200 { + build() { + Stack() { + Text('count = -0.5') + .width(300).height(300).backgroundColor(Color.Pink).fontColor(Color.Blue) + Particle({ + particles: [ + { + emitter: { + particle: { + type: ParticleType.POINT, //粒子类型 + config: { + radius: 10 + }, + count: -0.5, //粒子总数 + lifetime: 10000//粒子生命周期,单位ms + }, + position: [10, 10], + shape: ParticleEmitterShape.RECTANGLE//发射器形状 + } + }] + }).width(300).height(300) + }.width("100%").height("100%").align(Alignment.Center) + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0230.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0230.ets new file mode 100755 index 00000000..3ecb6450 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0230.ets @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAnimationParticleOption0230 { + build() { + Stack() { + Text('count = 500 & lifetime = 0') + .width('100%').height('100%').backgroundColor(Color.Pink).fontColor(Color.Blue) + Particle({ + particles: [ + { + emitter: { + particle: { + type: ParticleType.POINT, //粒子类型 + config: { + radius: 10 + }, + count: 500, //粒子总数 + lifetime: 0//粒子生命周期,单位ms + }, + position: [-10, -10], + shape: ParticleEmitterShape.RECTANGLE//发射器形状 + } + }] + }).width(300).height(300) + }.width("100%").height("100%").align(Alignment.Center) + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleSpin/UIAnimationParticleSpin0090.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleSpin/UIAnimationParticleSpin0090.ets new file mode 100755 index 00000000..7a423f4f --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAnimationParticleSpin/UIAnimationParticleSpin0090.ets @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAnimationParticleSpin0090 { + @State myCount: number = 100; + + build() { + Stack() { + Text('spin range: [0, 0] & config: [-20, 20]') + .width(300).height(300).backgroundColor(Color.Pink).fontColor(Color.Blue) + Particle({ + particles: [ + { + emitter: { + particle: { + type: ParticleType.IMAGE, + config: { + src:'text_zheng.png', + size: [20, 20] + }, + count: this.myCount, + lifetime: 10000 + }, + emitRate: 3, + shape: ParticleEmitterShape.CIRCLE + }, + spin: { + range: [0, 0], + updater: { + type: ParticleUpdater.RANDOM, + config: [-20, 20] + } + } + }] + }).width(300).height(300) + }.width("100%").height("100%").align(Alignment.Center) + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton001.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton001.ets new file mode 100755 index 00000000..532caaec --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton001.ets @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceButton001 { + build() { + Column() { + Button('One').margin({top:10}) + WithTheme({ colorMode: ThemeColorMode.DARK }) { + Button('WithThemeTwo').margin({top:10}) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton002.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton002.ets new file mode 100755 index 00000000..e2be4c08 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton002.ets @@ -0,0 +1,179 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { CustomTheme, CustomColors } from '@kit.ArkUI'; +import uiAppearance from '@ohos.uiAppearance' + +class GreenColors implements CustomColors { + fontPrimary = '#ff049404'; + fontEmphasize = '#FF00541F'; + fontOnPrimary = '#FFFFFFFF'; + compBackgroundTertiary = '#1111FF11'; + backgroundEmphasize = '#FF00541F'; + compEmphasizeSecondary = '#3322FF22'; +} + +class RedColors implements CustomColors { + fontPrimary = '#fff32b3c'; + fontEmphasize = '#FFD53032'; + fontOnPrimary = '#FFFFFFFF'; + compBackgroundTertiary = '#44FF2222'; + backgroundEmphasize = '#FFD00000'; + compEmphasizeSecondary = '#33FF1111'; +} + +class YelloColors implements CustomColors { + fontPrimary = '#FFFF00'; + fontEmphasize = '#FFFF00'; + fontOnPrimary = '#FFFFFFFF'; + compBackgroundTertiary = '#FFFF00'; + backgroundEmphasize = '#FFFF00'; + compEmphasizeSecondary = '#FFFF00'; +} + +class PinkColors implements CustomColors { + fontPrimary = '#FFB6C1'; + fontEmphasize = '#FFB6C1'; + fontOnPrimary = '#FFFFFFFF'; + compBackgroundTertiary = '#FFB6C1'; + backgroundEmphasize = '#FFB6C1'; + compEmphasizeSecondary = '#FFB6C1'; +} + +class GreenColors_dark implements CustomColors { + fontPrimary = '#3330d630'; + fontEmphasize = '#3330d630'; + fontOnPrimary = '#FFFFFFFF'; + compBackgroundTertiary = '#3330d630'; + backgroundEmphasize = '#3330d630'; + compEmphasizeSecondary = '#3330d630'; +} + +class RedColors_dark implements CustomColors { + fontPrimary = '#ff993941'; + fontEmphasize = '#ff993941'; + fontOnPrimary = '#FFFFFFFF'; + compBackgroundTertiary = '#ff993941'; + backgroundEmphasize = '#ff993941'; + compEmphasizeSecondary = '#ff993941'; +} + +class YelloColors_dark implements CustomColors { + fontPrimary = '#ffeaea34'; + fontEmphasize = '#ffeaea34'; + fontOnPrimary = '#fffcfbfb'; + compBackgroundTertiary = '#ffeaea34'; + backgroundEmphasize = '#ffeaea34'; + compEmphasizeSecondary = '#ffeaea34'; +} + +class PinkColors_dark implements CustomColors { + fontPrimary = '#ffd64b60'; + fontEmphasize = '#ffde5166'; + fontOnPrimary = '#fffcfbfb'; + compBackgroundTertiary = '#ffbf4e5f'; + backgroundEmphasize = '#ffc8495c'; + compEmphasizeSecondary = '#FFB6C1'; +} + +class PageCustomTheme implements CustomTheme { + colors?: CustomColors; + + constructor(colors: CustomColors) { + this.colors = colors; + } +} + +@Entry +@Component +struct UIAttributeFontInterfaceButton002 { + static readonly themeCount = 3; + @State themeIndex: number = 0; + themeArray: (CustomTheme | undefined)[] = [ + undefined, // System + new PageCustomTheme(new GreenColors()), + new PageCustomTheme(new RedColors()) + ]; + themeArray_dark: (CustomTheme | undefined)[] = [ + undefined, // System + new PageCustomTheme(new GreenColors_dark()), + new PageCustomTheme(new RedColors_dark()) + ]; + static readonly themeCount1 = 3; + @State themeIndex1: number = 0; + themeArray1: (CustomTheme | undefined)[] = [ + undefined, // System + new PageCustomTheme(new YelloColors()), + new PageCustomTheme(new PinkColors()) + ]; + themeArray1_dark: (CustomTheme | undefined)[] = [ + undefined, // System + new PageCustomTheme(new YelloColors_dark()), + new PageCustomTheme(new PinkColors_dark()) + ]; + + build() { + WithTheme({ theme: this.isDark() ? this.themeArray_dark[this.themeIndex1] : this.themeArray[this.themeIndex] }) { + Column() { + Button('One') + .margin('10px'); + WithTheme({ + theme: this.isDark() ? this.themeArray1_dark[this.themeIndex1] : this.themeArray1[this.themeIndex1] + }) { + Button('WithThemeTwo') + .margin('10px'); + } + + WithTheme({ + theme: this.isDark() ? this.themeArray1_dark[this.themeIndex1] : this.themeArray1[this.themeIndex1] + }) { + Button('WithThemeThree') + .margin('10px'); + } + + Button('Menu++').id('button_01') + .margin('10px') + .onClick(() => { + this.themeIndex = (1) % UIAttributeFontInterfaceButton002.themeCount; + }); + + Button('Menu--').id('button_02') + .margin('10px') + .onClick(() => { + this.themeIndex = (2) % UIAttributeFontInterfaceButton002.themeCount; + }); + + Button('Menu5++').id('button_03') + .margin('10px') + .onClick(() => { + this.themeIndex1 = (1) % UIAttributeFontInterfaceButton002.themeCount1; + }); + + Button('Menu5--').id('button_04') + .margin('10px') + .onClick(() => { + this.themeIndex1 = (2) % UIAttributeFontInterfaceButton002.themeCount1; + }); + } + .justifyContent(FlexAlign.Center) + .width('100%') + .height("100%"); + } + } + + isDark(): boolean { + return uiAppearance.getDarkMode() == uiAppearance.DarkMode.ALWAYS_DARK; + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton003.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton003.ets new file mode 100755 index 00000000..9f32d924 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton003.ets @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceButton003 { + build() { + Column() { + Button('One').margin({top:10}) + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton004.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton004.ets new file mode 100755 index 00000000..0962d987 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton004.ets @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceButton004 { + build() { + Column() { + Button('One').margin({top:10}) + WithTheme({ colorMode: ThemeColorMode.LIGHT}) { + Button('WithThemeTwo') + .margin({top:10}) + } + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton0190.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton0190.ets new file mode 100755 index 00000000..9610d7a2 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton0190.ets @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceButton0190 { + build() { + Column() { + Button('One').margin({ top: 10 }) + WithTheme({ colorMode: null }) { + Button('WithThemeTwo') + .margin({ top: 10 }) + } + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton0310.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton0310.ets new file mode 100755 index 00000000..63f27c03 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton0310.ets @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceButton0310 { + build() { + Column() { + Button('One').margin({ top: 10 }) + WithTheme({ colorMode: ThemeColorMode.SYSTEM }) { + Button('WithThemeTwo') + .margin({ top: 10 }) + } + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton0320.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton0320.ets new file mode 100755 index 00000000..75c31c23 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton0320.ets @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceButton0320 { + build() { + Column() { + Button('One').margin({ top: 10 }) + WithTheme({ colorMode: undefined }) { + Button('WithThemeTwo') + .margin({ top: 10 }) + } + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas001.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas001.ets new file mode 100755 index 00000000..51934aa5 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas001.ets @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceCanvas001 { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + build(){ + Column() { + Canvas(this.context) + .width(100) + .height(100) + .margin({top:10}) + .backgroundColor('#ffff00') + WithTheme({ colorMode: ThemeColorMode.LIGHT}) { + Canvas(this.context) + .width(100) + .height(100) + .margin({top:10}) + .backgroundColor('#ffff00') + } + + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas002.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas002.ets new file mode 100755 index 00000000..4f5b3f2f --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas002.ets @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceCanvas002 { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + build(){ + Column() { + Canvas(this.context) + .width(100) + .height(100) + .margin({top:10}) + .backgroundColor('#ffff00') + WithTheme({ colorMode: null}) { + Canvas(this.context) + .width(100) + .height(100) + .margin({top:10}) + .backgroundColor('#ffff00') + } + + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas003.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas003.ets new file mode 100755 index 00000000..20f21b8b --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas003.ets @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import uiAppearance from '@ohos.uiAppearance' + +@Entry +@Component +struct UIAttributeFontInterfaceCanvas003 { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Column() { + Canvas(this.context) + .width(100) + .height(100) + .margin({ top: 10 }) + .backgroundColor(this.isDark() ? '#ffffff' : '#ff0e0e0e') + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } + + isDark(): boolean { + return uiAppearance.getDarkMode() == uiAppearance.DarkMode.ALWAYS_DARK; + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas004.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas004.ets new file mode 100755 index 00000000..0ebacb33 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas004.ets @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceCanvas004 { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + build(){ + Column() { + Canvas(this.context) + .width(100) + .height(100) + .margin({top:10}) + .backgroundColor('#ffff00') + + + WithTheme({ colorMode: ThemeColorMode.DARK}) { + Canvas(this.context) + .width(100) + .height(100) + .margin({top:10}) + .backgroundColor('#ffff00') + } + + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas005.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas005.ets new file mode 100755 index 00000000..2cec2c37 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas005.ets @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceCanvas005 { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + build(){ + Column() { + Canvas(this.context) + .width(100) + .height(100) + .margin({top:10}) + .backgroundColor('#ffff00') + + + WithTheme({ colorMode: ThemeColorMode.SYSTEM}) { + Canvas(this.context) + .width(100) + .height(100) + .margin({top:10}) + .backgroundColor('#ffff00') + } + + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas006.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas006.ets new file mode 100755 index 00000000..797edc1f --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas006.ets @@ -0,0 +1,173 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { CustomTheme, CustomColors, uiAppearance } from '@kit.ArkUI'; + +class GreenColors_dark implements CustomColors { + fontPrimary = '#FFFFFFFF'; + fontEmphasize = '#FFFFFFFF'; + fontOnPrimary = '#000000'; + compBackgroundTertiary = '#FFFFFFFF'; + backgroundEmphasize = '#FFFFFFFF'; + compEmphasizeSecondary = '#FFFFFFFF'; +} + +class RedColors_dark implements CustomColors { + fontPrimary = '#FFFFFFFF'; + fontEmphasize = '#FFFFFFFF'; + fontOnPrimary = '#000000'; + compBackgroundTertiary = '#FFFFFFFF'; + backgroundEmphasize = '#FFFFFFFF'; + compEmphasizeSecondary = '#FFFFFFFF'; +} + +class GreenColors implements CustomColors { + fontPrimary = '#000000'; + fontEmphasize = '#000000'; + fontOnPrimary = '#FFFFFFFF'; + compBackgroundTertiary = '#000000'; + backgroundEmphasize = '#000000'; + compEmphasizeSecondary = '#000000'; +} + +class RedColors implements CustomColors { + fontPrimary = '#000000'; + fontEmphasize = '#000000'; + fontOnPrimary = '#FFFFFFFF'; + compBackgroundTertiary = '#000000'; + backgroundEmphasize = '#000000'; + compEmphasizeSecondary = '#000000'; +} + +class GreenColors1_dark implements CustomColors { + fontPrimary = '#ffc38d8d'; + fontEmphasize = '#ffc38d8d'; + fontOnPrimary = '#000000'; + compBackgroundTertiary = '#ffc38d8d'; + backgroundEmphasize = '#ffc38d8d'; + compEmphasizeSecondary = '#ffc38d8d'; +} + +class RedColors1_dark implements CustomColors { + fontPrimary = '#ffd65a5a'; + fontEmphasize = '#ffd65a5a'; + fontOnPrimary = '#000000'; + compBackgroundTertiary = '#ffd65a5a'; + backgroundEmphasize = '#ffd65a5a'; + compEmphasizeSecondary = '#ffd65a5a'; +} + +class GreenColors1 implements CustomColors { + fontPrimary = '#ff8d8b8b'; + fontEmphasize = '#ff8d8b8b'; + fontOnPrimary = '#FFFFFFFF'; + compBackgroundTertiary = '#ff8d8b8b'; + backgroundEmphasize = '#ff8d8b8b'; + compEmphasizeSecondary = '#ff8d8b8b'; +} + +class RedColors1 implements CustomColors { + fontPrimary = '#ff373535'; + fontEmphasize = '#ff373535'; + fontOnPrimary = '#FFFFFFFF'; + compBackgroundTertiary = '#ff373535'; + backgroundEmphasize = '#ff373535'; + compEmphasizeSecondary = '#ff373535'; +} + +class PageCustomTheme implements CustomTheme { + colors?: CustomColors + + constructor(colors: CustomColors) { + this.colors = colors + } +} + +@Entry +@Component +struct UIAttributeFontInterfaceCanvas006 { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + themeNames: string[] = ['System', 'Custom (green)', 'Custom (red)']; + themeArray: (CustomTheme)[] = [ + new PageCustomTheme(new GreenColors()), + new PageCustomTheme(new RedColors()), + ] + themeArray_dark: (CustomTheme)[] = [ + new PageCustomTheme(new GreenColors_dark()), + new PageCustomTheme(new RedColors_dark()), + ] + themeArray1: (CustomTheme)[] = [ + new PageCustomTheme(new GreenColors1()), + new PageCustomTheme(new RedColors1()), + ] + themeArray1_dark: (CustomTheme)[] = [ + new PageCustomTheme(new GreenColors1_dark()), + new PageCustomTheme(new RedColors1_dark()), + ] + @State themeIndex: number = 0; + @State themeIndex1: number = 0; + @State flag: boolean = false + + build() { + WithTheme({ theme: this.isDark() ? this.themeArray_dark[this.themeIndex] : this.themeArray[this.themeIndex] }) { + Column() { + Canvas(this.context) + .width(100) + .height(100) + .backgroundColor('#fff000') + .margin({ top: 10 }) + + WithTheme({ + theme: this.isDark() ? this.themeArray1_dark[this.themeIndex1] : this.themeArray1[this.themeIndex1] + }) { + Canvas(this.context) + .width(100) + .height(100) + .backgroundColor('#ff5c138a') + .margin({ top: 10 }) + } + + Button('Canvas4++') + .margin('10px') + .onClick(() => { + this.themeIndex1 = 0; + }).id('button_01'); + + Button('Canvas4--') + .margin('10px') + .onClick(() => { + this.themeIndex1 = 1; + }).id('button_02'); + + Button('Canvas5++') + .margin('10px') + .onClick(() => { + this.themeIndex1 = 0; + }).id('button_03'); + + Button('Canvas5--') + .margin('10px') + .onClick(() => { + this.themeIndex1 = 1; + }).id('button_04'); + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } + } + + isDark(): boolean { + return uiAppearance.getDarkMode() == uiAppearance.DarkMode.ALWAYS_DARK; + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas007.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas007.ets new file mode 100755 index 00000000..9d08a4b0 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas007.ets @@ -0,0 +1,149 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { CustomTheme, CustomColors, uiAppearance } from '@kit.ArkUI'; + +class GreenColors_dark implements CustomColors { + fontPrimary = '#FFFFFFFF'; + fontEmphasize = '#FFFFFFFF'; + fontOnPrimary = '#000000'; + compBackgroundTertiary = '#FFFFFFFF'; + backgroundEmphasize = '#FFFFFFFF'; + compEmphasizeSecondary = '#FFFFFFFF'; +} + +class RedColors_dark implements CustomColors { + fontPrimary = '#FFFFFFFF'; + fontEmphasize = '#FFFFFFFF'; + fontOnPrimary = '#000000'; + compBackgroundTertiary = '#FFFFFFFF'; + backgroundEmphasize = '#FFFFFFFF'; + compEmphasizeSecondary = '#FFFFFFFF'; +} + +class GreenColors implements CustomColors { + fontPrimary = '#000000'; + fontEmphasize = '#000000'; + fontOnPrimary = '#FFFFFFFF'; + compBackgroundTertiary = '#000000'; + backgroundEmphasize = '#000000'; + compEmphasizeSecondary = '#000000'; +} + +class RedColors implements CustomColors { + fontPrimary = '#000000'; + fontEmphasize = '#000000'; + fontOnPrimary = '#FFFFFFFF'; + compBackgroundTertiary = '#000000'; + backgroundEmphasize = '#000000'; + compEmphasizeSecondary = '#000000'; +} + +class GreenColors1_dark implements CustomColors { + fontPrimary = '#ffc38d8d'; + fontEmphasize = '#ffc38d8d'; + fontOnPrimary = '#000000'; + compBackgroundTertiary = '#ffc38d8d'; + backgroundEmphasize = '#ffc38d8d'; + compEmphasizeSecondary = '#ffc38d8d'; +} + +class RedColors1_dark implements CustomColors { + fontPrimary = '#ffd65a5a'; + fontEmphasize = '#ffd65a5a'; + fontOnPrimary = '#000000'; + compBackgroundTertiary = '#ffd65a5a'; + backgroundEmphasize = '#ffd65a5a'; + compEmphasizeSecondary = '#ffd65a5a'; +} + +class GreenColors1 implements CustomColors { + fontPrimary = '#ff8d8b8b'; + fontEmphasize = '#ff8d8b8b'; + fontOnPrimary = '#FFFFFFFF'; + compBackgroundTertiary = '#ff8d8b8b'; + backgroundEmphasize = '#ff8d8b8b'; + compEmphasizeSecondary = '#ff8d8b8b'; +} + +class RedColors1 implements CustomColors { + fontPrimary = '#ff373535'; + fontEmphasize = '#ff373535'; + fontOnPrimary = '#FFFFFFFF'; + compBackgroundTertiary = '#ff373535'; + backgroundEmphasize = '#ff373535'; + compEmphasizeSecondary = '#ff373535'; +} + +class PageCustomTheme implements CustomTheme { + colors?: CustomColors + + constructor(colors: CustomColors) { + this.colors = colors + } +} + +@Entry +@Component +struct UIAttributeFontInterfaceCanvas007 { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + themeNames: string[] = ['System', 'Custom (green)', 'Custom (red)']; + themeArray: (CustomTheme)[] = [ + new PageCustomTheme(new GreenColors()), + new PageCustomTheme(new RedColors()), + ] + themeArray_dark: (CustomTheme)[] = [ + new PageCustomTheme(new GreenColors_dark()), + new PageCustomTheme(new RedColors_dark()), + ] + themeArray1: (CustomTheme)[] = [ + new PageCustomTheme(new GreenColors1()), + new PageCustomTheme(new RedColors1()), + ] + themeArray1_dark: (CustomTheme)[] = [ + new PageCustomTheme(new GreenColors1_dark()), + new PageCustomTheme(new RedColors1_dark()), + ] + @State themeIndex: number = 0; + @State themeIndex1: number = 0; + @State flag: boolean = false + + build() { + WithTheme({}) { + Column() { + Canvas(this.context) + .width(100) + .height(100) + .backgroundColor('#fff000') + .margin({ top: 10 }) + + WithTheme({ + colorMode: undefined + }) { + Canvas(this.context) + .width(100) + .height(100) + .backgroundColor('#fffafafa') + .margin({ top: 10 }) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } + } + + isDark(): boolean { + return uiAppearance.getDarkMode() == uiAppearance.DarkMode.ALWAYS_DARK; + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle001.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle001.ets new file mode 100755 index 00000000..48de2624 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle001.ets @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceCircle001 { + build() { + Column() { + Column() { + Circle({ width: 150, height: 150 }) + .fillOpacity(0) + .strokeWidth(3) + .stroke(Color.Red) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: undefined }) { + Column() { + Circle({ width: 150, height: 150 }) + .margin({ top: 20 }) + .fillOpacity(0) + .strokeWidth(3) + .stroke(Color.Red) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle002.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle002.ets new file mode 100755 index 00000000..68664e0d --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle002.ets @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceCircle002 { + build() { + Column() { + Column() { + Circle({ width: 150, height: 150 }) + .fillOpacity(0) + .strokeWidth(3) + .stroke(Color.Red) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: ThemeColorMode.DARK }) { + Column() { + Circle({ width: 150, height: 150 }) + .margin({ top: 20 }) + .fillOpacity(0) + .strokeWidth(3) + .stroke(Color.Red) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle003.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle003.ets new file mode 100755 index 00000000..f523a739 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle003.ets @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceCircle003 { + build() { + Column() { + Column() { + Circle({ width: 150, height: 150 }) + .fillOpacity(0) + .strokeWidth(3) + .stroke(Color.Red) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: null }) { + Column() { + Circle({ width: 150, height: 150 }) + .margin({ top: 20 }) + .fillOpacity(0) + .strokeWidth(3) + .stroke(Color.Red) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle004.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle004.ets new file mode 100755 index 00000000..4ea35f49 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle004.ets @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceCircle004 { + build() { + Column() { + Column() { + Circle({ width: 150, height: 150 }) + .fillOpacity(0) + .strokeWidth(3) + .stroke(Color.Red) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: ThemeColorMode.SYSTEM }) { + Column() { + Circle({ width: 150, height: 150 }) + .margin({ top: 20 }) + .fillOpacity(0) + .strokeWidth(3) + .stroke(Color.Red) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle005.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle005.ets new file mode 100755 index 00000000..c6801d1c --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle005.ets @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceCircle005 { + build() { + Column() { + Column() { + Circle({ width: 150, height: 150 }) + .fillOpacity(0) + .strokeWidth(3) + .stroke(Color.Red) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle0210.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle0210.ets new file mode 100755 index 00000000..3c875fb0 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle0210.ets @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceCircle0210 { + private modeArr: number[] = [ThemeColorMode.LIGHT, ThemeColorMode.DARK, ThemeColorMode.SYSTEM]; + @State colorMode1: number = ThemeColorMode.LIGHT; + @State colorMode2: number = ThemeColorMode.LIGHT; + @State index1: number = 0; + @State index2: number = 0; + + build() { + WithTheme({ colorMode: this.colorMode1 }) { + Column() { + Button('one WithTheme3').margin(10) + Circle({ width: 50, height: 50 }) + .strokeWidth(3) + .stroke(Color.Red) + Circle({ width: 50, height: 50 }) + .margin({ top: 10 }) + .strokeWidth(3) + .stroke(Color.Yellow) + + WithTheme({ colorMode: this.colorMode2 }) { + Circle({ width: 50, height: 50 }) + .margin({ top: 10 }) + .strokeWidth(3) + .stroke(Color.Green) + } + + Button('Circle4++').onClick(() => { + this.colorMode2 = this.modeArr[this.index2]; + if (this.index2 < 2) { + this.index2++; + } + }).margin(5).id('button_0210_01') + Button('Circle4--').onClick(() => { + this.colorMode2 = this.modeArr[this.index2]; + if (this.index2 >= 1) { + this.index2--; + } + }).margin(5).id('button_0210_02') + Button('Circle5++').onClick(() => { + this.colorMode1 = this.modeArr[this.index1]; + if (this.index1 < 2) { + this.index1++; + } + }).margin(5).id('button_0210_03') + Button('Circle5--').onClick(() => { + this.colorMode1 = this.modeArr[this.index1]; + if (this.index1 >= 1) { + this.index1--; + } + }).id('button_0210_04') + + }.justifyContent(FlexAlign.Start).width('100%').height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle0270.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle0270.ets new file mode 100755 index 00000000..1ae0d076 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle0270.ets @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceCircle0270 { + build() { + Column() { + Circle({ width: 150, height: 150 }) + .fillOpacity(0) + .strokeWidth(3) + .stroke(Color.Red) + WithTheme({ colorMode: ThemeColorMode.LIGHT }) { + Circle({ width: 150, height: 150 }) + .margin({ top: 20 }) + .fillOpacity(0) + .strokeWidth(3) + .stroke(Color.Red) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog001.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog001.ets new file mode 100755 index 00000000..6f484bea --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog001.ets @@ -0,0 +1,138 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@CustomDialog +struct CustomDialogExample001 { + controller?: CustomDialogController + cancel: () => void = () => { + } + confirm: () => void = () => { + } + build() { + Column() { + Text('可展示在主窗口外的弹窗') + .fontSize(30) + .height(100) + .width('100%') + } + .height(150) + } +} +@CustomDialog +struct CustomDialogExampley001 { + controller?: CustomDialogController + cancel: () => void = () => { + } + confirm: () => void = () => { + } + build() { + Column() { + WithTheme({ colorMode: null }) { + Column() { + Text('可展示在主窗口外的弹窗') + .fontSize(30) + .height(100) + .width('100%') + } + .justifyContent(FlexAlign.Center) + .height(150) + .margin({top:10}).backgroundColor($r('sys.color.background_primary')) + } + }.width('100%').height('100%') + } +} +@Entry +@Component +struct UIAttributeFontInterfaceCustomDialog001 { + dialogController: CustomDialogController | null = new CustomDialogController({ + builder: CustomDialogExample001({ + cancel: ()=> { this.onCancel() }, + confirm: ()=> { this.onAccept() } + }), + cancel: this.existApp, + autoCancel: true, + onWillDismiss:(dismissDialogAction: DismissDialogAction)=> { + console.info("reason=" + JSON.stringify(dismissDialogAction.reason)) + console.log("dialog onWillDismiss") + if (dismissDialogAction.reason == DismissReason.PRESS_BACK) { + dismissDialogAction.dismiss() + } + if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) { + dismissDialogAction.dismiss() + } + }, + offset: { dx: 0, dy: -150 }, + gridCount: 4, + showInSubWindow: true, + isModal: false, + customStyle: false, + cornerRadius: 10, + }) + bialogController: CustomDialogController | null = new CustomDialogController({ + builder: CustomDialogExampley001({ + cancel: ()=> { this.onCancel() }, + confirm: ()=> { this.onAccept() } + }), + cancel: this.existApp, + autoCancel: true, + onWillDismiss:(dismissDialogAction: DismissDialogAction)=> { + console.info("reason=" + JSON.stringify(dismissDialogAction.reason)) + console.log("dialog onWillDismiss") + if (dismissDialogAction.reason == DismissReason.PRESS_BACK) { + dismissDialogAction.dismiss() + } + if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) { + dismissDialogAction.dismiss() + } + }, + offset: { dx: 0, dy: 50 }, + gridCount: 4, + showInSubWindow: true, + isModal: true, + customStyle: false, + cornerRadius: 10, + }) + // 在自定义组件即将析构销毁时将dialogController置空 + aboutToDisappear() { + this.dialogController = null // 将dialogController置空 + this.bialogController = null + } + + onCancel() { + console.info('Callback when the first button is clicked') + } + + onAccept() { + console.info('Callback when the second button is clicked') + } + + existApp() { + console.info('Click the callback in the blank area') + } + build() { + Column() { + Button('Button').id('1') + .onClick(() => { + if (this.bialogController != null) { + this.bialogController.open() + } + if (this.dialogController != null) { + this.dialogController.open() + } + }) + }.width('100%').height("100%") + } + +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog002.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog002.ets new file mode 100755 index 00000000..af55fa3d --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog002.ets @@ -0,0 +1,139 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@CustomDialog +struct CustomDialogExample002 { + controller?: CustomDialogController + cancel: () => void = () => { + } + confirm: () => void = () => { + } + build() { + Column() { + Text('可展示在主窗口外的弹窗') + .fontSize(30) + .height(100) + .width('100%') + } + .height(150) + } +} +@CustomDialog +struct CustomDialogExampley002 { + controller?: CustomDialogController + cancel: () => void = () => { + } + confirm: () => void = () => { + } + build() { + Column() { + WithTheme({ colorMode: ThemeColorMode.DARK }) { + Column() { + Text('可展示在主窗口外的弹窗') + .fontSize(30) + .height(100) + .width('100%') + } + .justifyContent(FlexAlign.Center) + .height(150) + .margin({top:10}).backgroundColor($r('sys.color.background_primary')) + } + }.width('100%').height('100%') + } +} +@Entry +@Component +struct UIAttributeFontInterfaceCustomDialog002 { + dialogController: CustomDialogController | null = new CustomDialogController({ + builder: CustomDialogExample002({ + cancel: ()=> { this.onCancel() }, + confirm: ()=> { this.onAccept() } + }), + cancel: this.existApp, + autoCancel: true, + onWillDismiss:(dismissDialogAction: DismissDialogAction)=> { + console.info("reason=" + JSON.stringify(dismissDialogAction.reason)) + console.log("dialog onWillDismiss") + if (dismissDialogAction.reason == DismissReason.PRESS_BACK) { + dismissDialogAction.dismiss() + } + if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) { + dismissDialogAction.dismiss() + } + }, + alignment: DialogAlignment.Center, + offset: { dx: 0, dy: -150 }, + gridCount: 4, + showInSubWindow: true, + isModal: true, + customStyle: false, + cornerRadius: 10, + backgroundColor:Color.Black + }) + bialogController: CustomDialogController | null = new CustomDialogController({ + builder: CustomDialogExampley002({ + cancel: ()=> { this.onCancel() }, + confirm: ()=> { this.onAccept() } + }), + cancel: this.existApp, + autoCancel: true, + onWillDismiss:(dismissDialogAction: DismissDialogAction)=> { + console.info("reason=" + JSON.stringify(dismissDialogAction.reason)) + console.log("dialog onWillDismiss") + if (dismissDialogAction.reason == DismissReason.PRESS_BACK) { + dismissDialogAction.dismiss() + } + if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) { + dismissDialogAction.dismiss() + } + }, + alignment: DialogAlignment.Center, + offset: { dx: 0, dy: 50 }, + gridCount: 4, + showInSubWindow: true, + isModal: true, + customStyle: false, + cornerRadius: 10, + }) + // 在自定义组件即将析构销毁时将dialogController置空 + aboutToDisappear() { + this.dialogController = null // 将dialogController置空 + this.bialogController = null + } + + onCancel() { + console.info('Callback when the first button is clicked') + } + + onAccept() { + console.info('Callback when the second button is clicked') + } + + existApp() { + console.info('Click the callback in the blank area') + } + build() { + Column() { + Button('Button').id('1') + .onClick(() => { + if (this.bialogController != null) { + this.bialogController.open() + } + if (this.dialogController != null) { + this.dialogController.open() + } + }) + }.width('100%').height("100%") + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog003.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog003.ets new file mode 100755 index 00000000..77e6f434 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog003.ets @@ -0,0 +1,135 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@CustomDialog +struct CustomDialogExample003 { + controller?: CustomDialogController + cancel: () => void = () => { + } + confirm: () => void = () => { + } + build() { + Column() { + Text('可展示在主窗口外的弹窗') + .fontSize(30) + .height(100) + .width('100%') + } + .height(150) + } +} +@CustomDialog +struct CustomDialogExampley003 { + controller?: CustomDialogController + cancel: () => void = () => { + } + confirm: () => void = () => { + } + build() { + Column() { + WithTheme({ colorMode: ThemeColorMode.SYSTEM }) { + Column() { + Text('可展示在主窗口外的弹窗') + .fontSize(30) + .height(100) + .width('100%') + } + .justifyContent(FlexAlign.Center) + .height(150) + .margin({top:10}).backgroundColor($r('sys.color.background_primary')) + } + }.width('100%').height('100%') + } +} +@Entry +@Component +struct UIAttributeFontInterfaceCustomDialog003 { + @State flag: boolean = false + dialogController: CustomDialogController | null = new CustomDialogController({ + builder: CustomDialogExample003({ + cancel: ()=> { this.onCancel() }, + confirm: ()=> { this.onAccept() } + }), + cancel: this.existApp, + autoCancel: true, + onWillDismiss:(dismissDialogAction: DismissDialogAction)=> { + console.info("reason=" + JSON.stringify(dismissDialogAction.reason)) + console.log("dialog onWillDismiss") + if (dismissDialogAction.reason == DismissReason.PRESS_BACK) { + dismissDialogAction.dismiss() + } + if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) { + dismissDialogAction.dismiss() + } + }, + offset: { dx: 0, dy: -150 }, + gridCount: 4, + showInSubWindow: true, + isModal: true, + customStyle: false, + cornerRadius: 10, + }) + bialogController: CustomDialogController | null = new CustomDialogController({ + builder: CustomDialogExampley003({ + cancel: ()=> { this.onCancel() }, + confirm: ()=> { this.onAccept() } + }), + cancel: this.existApp, + autoCancel: true, + onWillDismiss:(dismissDialogAction: DismissDialogAction)=> { + if (dismissDialogAction.reason == DismissReason.PRESS_BACK) { + dismissDialogAction.dismiss() + } + if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) { + dismissDialogAction.dismiss() + } + }, + offset: { dx: 0, dy: 50 }, + gridCount: 4, + showInSubWindow: true, + isModal: true, + customStyle: false, + cornerRadius: 10, + }) + // 在自定义组件即将析构销毁时将dialogController置空 + aboutToDisappear() { + this.dialogController = null // 将dialogController置空 + this.bialogController = null + } + + onCancel() { + console.info('Callback when the first button is clicked') + } + + onAccept() { + console.info('Callback when the second button is clicked') + } + + existApp() { + console.info('Click the callback in the blank area') + } + build() { + Column() { + Button('Button').id('1') + .onClick(() => { + if (this.bialogController != null) { + this.bialogController.open() + } + if (this.dialogController != null) { + this.dialogController.open() + } + }) + }.width('100%').height("100%") + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog004.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog004.ets new file mode 100755 index 00000000..697033ed --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog004.ets @@ -0,0 +1,138 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@CustomDialog +struct CustomDialogExample004 { + controller?: CustomDialogController + cancel: () => void = () => { + } + confirm: () => void = () => { + } + build() { + + Column() { + Text('可展示在主窗口外的弹窗') + .fontSize(30) + .height(100) + .width('100%') + } + .height(150) + } +} +@CustomDialog +struct CustomDialogExampley004 { + controller?: CustomDialogController + cancel: () => void = () => { + } + confirm: () => void = () => { + } + build() { + Column() { + WithTheme({ colorMode: ThemeColorMode.LIGHT }) { + Column() { + Text('可展示在主窗口外的弹窗') + .fontSize(30) + .height(100) + .width('100%') + } + .justifyContent(FlexAlign.Center) + .height(150) + .margin({top:10}).backgroundColor($r('sys.color.background_primary')) + } + }.width('100%').height('100%') + } +} +@Entry +@Component +struct UIAttributeFontInterfaceCustomDialog004 { + @State flag: boolean = false + dialogController: CustomDialogController | null = new CustomDialogController({ + builder: CustomDialogExample004({ + cancel: ()=> { this.onCancel() }, + confirm: ()=> { this.onAccept() } + }), + cancel: this.existApp, + autoCancel: true, + onWillDismiss:(dismissDialogAction: DismissDialogAction)=> { + console.info("reason=" + JSON.stringify(dismissDialogAction.reason)) + console.log("dialog onWillDismiss") + if (dismissDialogAction.reason == DismissReason.PRESS_BACK) { + dismissDialogAction.dismiss() + } + if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) { + dismissDialogAction.dismiss() + } + }, + offset: { dx: 0, dy: -150 }, + gridCount: 4, + showInSubWindow: true, + isModal: true, + customStyle: false, + cornerRadius: 10, + }) + bialogController: CustomDialogController | null = new CustomDialogController({ + builder: CustomDialogExampley004({ + cancel: ()=> { this.onCancel() }, + confirm: ()=> { this.onAccept() } + }), + cancel: this.existApp, + autoCancel: true, + onWillDismiss:(dismissDialogAction: DismissDialogAction)=> { + if (dismissDialogAction.reason == DismissReason.PRESS_BACK) { + dismissDialogAction.dismiss() + } + if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) { + dismissDialogAction.dismiss() + } + }, + offset: { dx: 0, dy: 50 }, + gridCount: 4, + showInSubWindow: true, + isModal: true, + customStyle: false, + cornerRadius: 10, + backgroundColor:Color.White + }) + // 在自定义组件即将析构销毁时将dialogController置空 + aboutToDisappear() { + this.dialogController = null // 将dialogController置空 + this.bialogController = null + } + + onCancel() { + console.info('Callback when the first button is clicked') + } + + onAccept() { + console.info('Callback when the second button is clicked') + } + + existApp() { + console.info('Click the callback in the blank area') + } + build() { + Column() { + Button('Button').id('1') + .onClick(() => { + if (this.bialogController != null) { + this.bialogController.open() + } + if (this.dialogController != null) { + this.dialogController.open() + } + }) + }.width('100%').height("100%") + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog005.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog005.ets new file mode 100755 index 00000000..7771d546 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog005.ets @@ -0,0 +1,149 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +@CustomDialog +struct CustomDialogExample0050_01 { + controller?: CustomDialogController + cancel: () => void = () => { + } + confirm: () => void = () => { + } + + build() { + Column() { + Text('custom 001') + .fontSize(30) + .height(100) + .width('100%') + } + .height(150) + } +} + +@CustomDialog +struct CustomDialogExample0050_02 { + controller2?: CustomDialogController + cancel: () => void = () => { + } + confirm: () => void = () => { + } + + build() { + Column() { + Text('custom 002') + .fontSize(30) + .height(100) + .width('100%') + } + .height(150) + } +} + +@CustomDialog +struct CustomDialogExample0050_03 { + controller3?: CustomDialogController + cancel: () => void = () => { + } + confirm: () => void = () => { + } + + build() { + Column() { + Text('custom 003') + .fontSize(30) + .height(100) + .width('100%') + } + .height(150) + } +} + +@Entry +@Component +struct UIAttributeFontInterfaceCustomDialog005 { + private modeArr: number[] = [ThemeColorMode.LIGHT, ThemeColorMode.DARK, ThemeColorMode.SYSTEM]; + @State colorMode1: number = ThemeColorMode.LIGHT; + @State colorMode2: number = ThemeColorMode.LIGHT; + @State index1: number = 0; + @State index2: number = 0; + + dialogController: CustomDialogController | null = new CustomDialogController({ + builder: CustomDialogExample0050_01({}), + autoCancel: true, + isModal: true, + customStyle: false, + cornerRadius: 10, + }) + dialogController1: CustomDialogController | null = new CustomDialogController({ + builder: CustomDialogExample0050_02({}), + autoCancel: true, + isModal: true, + customStyle: false, + cornerRadius: 10, + }) + dialogController2: CustomDialogController | null = new CustomDialogController({ + builder: CustomDialogExample0050_03({}), + autoCancel: true, + isModal: true, + customStyle: false, + cornerRadius: 10, + }) + + build() { + WithTheme({ colorMode: this.colorMode1 }) { + Column() { + Button('show Dialog01').onClick(() => { + this.dialogController?.open() + }) + Button('show Dialog02').onClick(() => { + this.dialogController1?.open() + }).margin(10) + + WithTheme({ colorMode: this.colorMode2 }) { + Button('show Dialog03').onClick(() => { + this.dialogController2?.open() + }) + } + + Button('CustomDialog4++').onClick(() => { + this.colorMode2 = this.modeArr[this.index2]; + if (this.index2 < 2) { + this.index2++; + } + }).margin(5).id('button_0050_01').backgroundColor(Color.Orange) + Button('CustomDialog4--').onClick(() => { + this.colorMode2 = this.modeArr[this.index2]; + if (this.index2 >= 1) { + this.index2--; + } + }).margin(5).id('button_0050_02').backgroundColor(Color.Orange) + Button('CustomDialog5++').onClick(() => { + this.colorMode1 = this.modeArr[this.index1]; + if (this.index1 < 2) { + this.index1++; + } + }).margin(5).id('button_0050_03').backgroundColor(Color.Orange) + Button('CustomDialog5--').onClick(() => { + this.colorMode1 = this.modeArr[this.index1]; + if (this.index1 >= 1) { + this.index1--; + } + }).id('button_0050_04').backgroundColor(Color.Orange) + + }.justifyContent(FlexAlign.Start).width('100%').height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog006.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog006.ets new file mode 100755 index 00000000..4374adbb --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog006.ets @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@CustomDialog +struct CustomDialogExample006 { + controller?: CustomDialogController + cancel: () => void = () => { + } + confirm: () => void = () => { + } + build() { + + Column() { + Text('可展示在主窗口外的弹窗') + .fontSize(30) + .height(100) + .width('100%') + } + .height(150) + } +} +@CustomDialog +struct CustomDialogExampley006 { + controller?: CustomDialogController + cancel: () => void = () => { + } + confirm: () => void = () => { + } + build() { + Column() { + WithTheme({ colorMode: undefined }) { + Column() { + Text('可展示在主窗口外的弹窗') + .fontSize(30) + .height(100) + .width('100%') + } + .justifyContent(FlexAlign.Center) + .height(150) + .margin({top:10}).backgroundColor($r('sys.color.background_primary')) + } + }.width('100%').height('100%') + } +} +@Entry +@Component +struct UIAttributeFontInterfaceCustomDialog006 { + @State flag: boolean = false + dialogController: CustomDialogController | null = new CustomDialogController({ + builder: CustomDialogExample006({ + cancel: ()=> { this.onCancel() }, + confirm: ()=> { this.onAccept() } + }), + cancel: this.existApp, + autoCancel: true, + onWillDismiss:(dismissDialogAction: DismissDialogAction)=> { + console.info("reason=" + JSON.stringify(dismissDialogAction.reason)) + console.log("dialog onWillDismiss") + if (dismissDialogAction.reason == DismissReason.PRESS_BACK) { + dismissDialogAction.dismiss() + } + if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) { + dismissDialogAction.dismiss() + } + }, + offset: { dx: 0, dy: -150 }, + gridCount: 4, + showInSubWindow: true, + isModal: true, + customStyle: false, + cornerRadius: 10, + }) + bialogController: CustomDialogController | null = new CustomDialogController({ + builder: CustomDialogExampley006({ + cancel: ()=> { this.onCancel() }, + confirm: ()=> { this.onAccept() } + }), + cancel: this.existApp, + autoCancel: true, + onWillDismiss:(dismissDialogAction: DismissDialogAction)=> { + if (dismissDialogAction.reason == DismissReason.PRESS_BACK) { + dismissDialogAction.dismiss() + } + if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) { + dismissDialogAction.dismiss() + } + }, + offset: { dx: 0, dy: 50 }, + gridCount: 4, + showInSubWindow: true, + isModal: true, + customStyle: false, + cornerRadius: 10, + }) + // 在自定义组件即将析构销毁时将dialogController置空 + aboutToDisappear() { + this.dialogController = null // 将dialogController置空 + this.bialogController = null + } + + onCancel() { + console.info('Callback when the first button is clicked') + } + + onAccept() { + console.info('Callback when the second button is clicked') + } + + existApp() { + console.info('Click the callback in the blank area') + } + build() { + Column() { + Button('Button').id('1') + .onClick(() => { + if (this.bialogController != null) { + this.bialogController.open() + } + if (this.dialogController != null) { + this.dialogController.open() + } + }) + }.width('100%').height("100%") + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog007.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog007.ets new file mode 100755 index 00000000..8b77f8c4 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog007.ets @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@CustomDialog +struct CustomDialogExample007 { + controller?: CustomDialogController + cancel: () => void = () => { + } + confirm: () => void = () => { + } + build() { + Column() { + Text('可展示在主窗口外的弹窗') + .fontSize(30) + .height(100) + .width('100%') + } + .height(150) + } +} + +@Entry +@Component + +struct UIAttributeFontInterfaceCustomDialog007 { + dialogController: CustomDialogController | null = new CustomDialogController({ + builder: CustomDialogExample007({ + cancel: ()=> { this.onCancel() }, + confirm: ()=> { this.onAccept() } + }), + cancel: this.existApp, + autoCancel: true, + onWillDismiss:(dismissDialogAction: DismissDialogAction)=> { + console.info("reason=" + JSON.stringify(dismissDialogAction.reason)) + console.log("dialog onWillDismiss") + if (dismissDialogAction.reason == DismissReason.PRESS_BACK) { + dismissDialogAction.dismiss() + } + if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) { + dismissDialogAction.dismiss() + } + }, + offset: { dx: 0, dy: -150 }, + gridCount: 4, + showInSubWindow: true, + isModal: true, + customStyle: false, + cornerRadius: 10, + }) + // 在自定义组件即将析构销毁时将dialogController置空 + aboutToDisappear() { + this.dialogController = null // 将dialogController置空 + } + onCancel() { + console.info('Callback when the first button is clicked') + } + + onAccept() { + console.info('Callback when the second button is clicked') + } + + existApp() { + console.info('Click the callback in the blank area') + } + + build() { + Column() { + Button('Button').id('1') + .onClick(() => { + if (this.dialogController != null) { + this.dialogController.open() + } + }) + }.width('100%').height("100%") + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog0330.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog0330.ets new file mode 100755 index 00000000..f6717fb1 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog0330.ets @@ -0,0 +1,149 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +@CustomDialog +struct CustomDialogExample0330_01 { + controller?: CustomDialogController + cancel: () => void = () => { + } + confirm: () => void = () => { + } + + build() { + Column() { + Text('custom 001') + .fontSize(30) + .height(100) + .width('100%') + } + .height(150) + } +} + +@CustomDialog +struct CustomDialogExample0330_02 { + controller2?: CustomDialogController + cancel: () => void = () => { + } + confirm: () => void = () => { + } + + build() { + Column() { + Text('custom 002') + .fontSize(30) + .height(100) + .width('100%') + } + .height(150) + } +} + +@CustomDialog +struct CustomDialogExample0330_03 { + controller3?: CustomDialogController + cancel: () => void = () => { + } + confirm: () => void = () => { + } + + build() { + Column() { + Text('custom 003') + .fontSize(30) + .height(100) + .width('100%') + } + .height(150) + } +} + +@Entry +@Component +struct UIAttributeFontInterfaceCustomDialog0330 { + private modeArr: number[] = [ThemeColorMode.LIGHT, ThemeColorMode.DARK, ThemeColorMode.SYSTEM]; + @State colorMode1: number = ThemeColorMode.LIGHT; + @State colorMode2: number = ThemeColorMode.LIGHT; + @State index1: number = 0; + @State index2: number = 0; + + dialogController: CustomDialogController | null = new CustomDialogController({ + builder: CustomDialogExample0330_01({}), + autoCancel: true, + isModal: true, + customStyle: false, + cornerRadius: 10, + }) + dialogController1: CustomDialogController | null = new CustomDialogController({ + builder: CustomDialogExample0330_02({}), + autoCancel: true, + isModal: true, + customStyle: false, + cornerRadius: 10, + }) + dialogController2: CustomDialogController | null = new CustomDialogController({ + builder: CustomDialogExample0330_03({}), + autoCancel: true, + isModal: true, + customStyle: false, + cornerRadius: 10, + }) + + build() { + WithTheme({ colorMode: this.colorMode1 }) { + Column() { + Button('show Dialog01').onClick(() => { + this.dialogController?.open() + }) + Button('show Dialog02').onClick(() => { + this.dialogController1?.open() + }).margin(10) + + WithTheme({ colorMode: this.colorMode2 }) { + Button('show Dialog03').onClick(() => { + this.dialogController2?.open() + }) + } + + Button('CustomDialog4++').onClick(() => { + this.colorMode2 = this.modeArr[this.index2]; + if (this.index2 < 2) { + this.index2++; + } + }).margin(5).id('button_0330_01').backgroundColor(Color.Orange) + Button('CustomDialog4--').onClick(() => { + this.colorMode2 = this.modeArr[this.index2]; + if (this.index2 >= 1) { + this.index2--; + } + }).margin(5).id('button_0330_02').backgroundColor(Color.Orange) + Button('CustomDialog5++').onClick(() => { + this.colorMode1 = this.modeArr[this.index1]; + if (this.index1 < 2) { + this.index1++; + } + }).margin(5).id('button_0330_03').backgroundColor(Color.Orange) + Button('CustomDialog5--').onClick(() => { + this.colorMode1 = this.modeArr[this.index1]; + if (this.index1 >= 1) { + this.index1--; + } + }).id('button_0330_04').backgroundColor(Color.Orange) + + }.justifyContent(FlexAlign.Start).width('100%').height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceDarkMode/UIAttributeFontInterfaceDarkMode0040.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceDarkMode/UIAttributeFontInterfaceDarkMode0040.ets new file mode 100755 index 00000000..cb98244a --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceDarkMode/UIAttributeFontInterfaceDarkMode0040.ets @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +import { ComposeTitleBar, promptAction } from '@kit.ArkUI' + +@Entry +@Component +struct UIAttributeFontInterfaceDarkMode0040 { + build() { + Row() { + Column() { + ComposeTitleBar({ + menuItems: [{ isEnabled: true, value: 'other_icon.png', + action: () => promptAction.showToast({ message: "show toast index 1" }) + }], + title: "标题", + subtitle: "副标题" + }) + Divider().height(2).color(0xCCCCCC).id('divider_0040') + }.width('100%') + }.width('100%').justifyContent(FlexAlign.Start) + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceDarkMode/UIAttributeFontInterfaceDarkMode0050.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceDarkMode/UIAttributeFontInterfaceDarkMode0050.ets new file mode 100755 index 00000000..9477060f --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceDarkMode/UIAttributeFontInterfaceDarkMode0050.ets @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +import { ComposeTitleBar, promptAction } from '@kit.ArkUI' + +@Entry +@Component +struct UIAttributeFontInterfaceDarkMode0050 { + build() { + Row() { + Column() { + ComposeTitleBar({ + menuItems: [{ isEnabled: true, value: 'close_icon.png', + action: () => promptAction.showToast({ message: "show toast index 1" }) + }], + title: "标题", + subtitle: "副标题", + item: { isEnabled: true, value: $r('app.media.app_icon') } + }) + Divider().height(2).color(0xCCCCCC) + }.width('100%') + }.width('100%').justifyContent(FlexAlign.Start) + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage001.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage001.ets new file mode 100755 index 00000000..16ebf9f3 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage001.ets @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { image } from '@kit.ImageKit'; +import { buffer } from '@kit.ArkTS'; + +@Entry +@Component +struct UIAttributeFontInterfaceImage001 { + @State image: string | null = null; + @State draggable1: boolean = true; + @State dragPreviewOptions1: DragPreviewOptions | null = null; + @State AVisible: Visibility = Visibility.Visible + + private async getPixmapFromMedia(resource: Resource) { + let unit8Array = await getContext(this)?.resourceManager?.getMediaContent({ + bundleName: resource.bundleName, + moduleName: resource.moduleName, + id: resource.id + }) + let imageSource = image.createImageSource(unit8Array.buffer.slice(0, unit8Array.buffer.byteLength)) + let createPixelMap: image.PixelMap = await imageSource.createPixelMap({ + desiredPixelFormat: image.PixelMapFormat.RGBA_8888 + }) + await imageSource.release() + return createPixelMap + } + + async getBase64() { + let pixelMap = await this.getPixmapFromMedia($r('app.media.caiyuan')) + const imagePackerApi: image.ImagePacker = image.createImagePacker(); + let packOpts: image.PackingOption = { format: 'image/jpeg', quality: 100 }; + imagePackerApi.packing(pixelMap, packOpts).then((data: ArrayBuffer) => { + let buf: buffer.Buffer = buffer.from(data); + this.image = 'data:image/jpeg;base64,' + buf.toString('base64', 0, buf.length); + }) + } + + aboutToAppear(): void { + this.getBase64(); + } + + build() { + Column() { + Column() { + Image(this.image) + .width(100) + .height(100) + .margin(20) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: ThemeColorMode.SYSTEM }) { + Column() { + Image(this.image) + .width(100) + .height(100) + } + .justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage002.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage002.ets new file mode 100755 index 00000000..5b6ec489 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage002.ets @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { image } from '@kit.ImageKit'; +import { buffer } from '@kit.ArkTS'; + +@Entry +@Component +struct UIAttributeFontInterfaceImage002 { + @State image: string | null = null; + @State draggable1: boolean = true; + @State dragPreviewOptions1: DragPreviewOptions | null = null; + @State AVisible: Visibility = Visibility.Visible + + private async getPixmapFromMedia(resource: Resource) { + let unit8Array = await getContext(this)?.resourceManager?.getMediaContent({ + bundleName: resource.bundleName, + moduleName: resource.moduleName, + id: resource.id + }) + let imageSource = image.createImageSource(unit8Array.buffer.slice(0, unit8Array.buffer.byteLength)) + let createPixelMap: image.PixelMap = await imageSource.createPixelMap({ + desiredPixelFormat: image.PixelMapFormat.RGBA_8888 + }) + await imageSource.release() + return createPixelMap + } + + async getBase64() { + let pixelMap = await this.getPixmapFromMedia($r('app.media.caiyuan')) + const imagePackerApi: image.ImagePacker = image.createImagePacker(); + let packOpts: image.PackingOption = { format: 'image/jpeg', quality: 100 }; + imagePackerApi.packing(pixelMap, packOpts).then((data: ArrayBuffer) => { + let buf: buffer.Buffer = buffer.from(data); + this.image = 'data:image/jpeg;base64,' + buf.toString('base64', 0, buf.length); + }) + } + + aboutToAppear(): void { + this.getBase64(); + } + + build() { + Column() { + Column() { + Image(this.image) + .width(100) + .height(100) + .margin(20) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: ThemeColorMode.LIGHT }) { + Column() { + Image(this.image) + .width(100) + .height(100) + } + .justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.width('100%').height('100%') + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage003.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage003.ets new file mode 100755 index 00000000..8e623228 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage003.ets @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { image } from '@kit.ImageKit'; +import { buffer } from '@kit.ArkTS'; + +@Entry +@Component +struct UIAttributeFontInterfaceImage003 { + @State image: string | null = null; + @State draggable1: boolean = true; + @State dragPreviewOptions1: DragPreviewOptions | null = null; + @State AVisible: Visibility = Visibility.Visible + + private async getPixmapFromMedia(resource: Resource) { + let unit8Array = await getContext(this)?.resourceManager?.getMediaContent({ + bundleName: resource.bundleName, + moduleName: resource.moduleName, + id: resource.id + }) + let imageSource = image.createImageSource(unit8Array.buffer.slice(0, unit8Array.buffer.byteLength)) + let createPixelMap: image.PixelMap = await imageSource.createPixelMap({ + desiredPixelFormat: image.PixelMapFormat.RGBA_8888 + }) + await imageSource.release() + return createPixelMap + } + + async getBase64() { + let pixelMap = await this.getPixmapFromMedia($r('app.media.caiyuan')) + const imagePackerApi: image.ImagePacker = image.createImagePacker(); + let packOpts: image.PackingOption = { format: 'image/jpeg', quality: 100 }; + imagePackerApi.packing(pixelMap, packOpts).then((data: ArrayBuffer) => { + let buf: buffer.Buffer = buffer.from(data); + this.image = 'data:image/jpeg;base64,' + buf.toString('base64', 0, buf.length); + }) + } + + aboutToAppear(): void { + this.getBase64(); + } + + build() { + Column() { + Column() { + Image(this.image) + .width(100) + .height(100) + .margin(20) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: undefined }) { + Column() { + Image(this.image) + .width(100) + .height(100) + } + .justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.width('100%').height('100%') + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage004.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage004.ets new file mode 100755 index 00000000..3d88c46f --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage004.ets @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { image } from '@kit.ImageKit'; +import { buffer } from '@kit.ArkTS'; + +@Entry +@Component +struct UIAttributeFontInterfaceImage004 { + @State image: string | null = null; + @State draggable1: boolean = true; + @State dragPreviewOptions1: DragPreviewOptions | null = null; + @State AVisible: Visibility = Visibility.Visible + + private async getPixmapFromMedia(resource: Resource) { + let unit8Array = await getContext(this)?.resourceManager?.getMediaContent({ + bundleName: resource.bundleName, + moduleName: resource.moduleName, + id: resource.id + }) + let imageSource = image.createImageSource(unit8Array.buffer.slice(0, unit8Array.buffer.byteLength)) + let createPixelMap: image.PixelMap = await imageSource.createPixelMap({ + desiredPixelFormat: image.PixelMapFormat.RGBA_8888 + }) + await imageSource.release() + return createPixelMap + } + + async getBase64() { + let pixelMap = await this.getPixmapFromMedia($r('app.media.caiyuan')) + const imagePackerApi: image.ImagePacker = image.createImagePacker(); + let packOpts: image.PackingOption = { format: 'image/jpeg', quality: 100 }; + imagePackerApi.packing(pixelMap, packOpts).then((data: ArrayBuffer) => { + let buf: buffer.Buffer = buffer.from(data); + this.image = 'data:image/jpeg;base64,' + buf.toString('base64', 0, buf.length); + }) + } + + aboutToAppear(): void { + this.getBase64(); + } + + build() { + Column() { + Column() { + Image(this.image) + .width(100) + .height(100) + .margin(20) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: null }) { + Column() { + Image(this.image) + .width(100) + .height(100) + } + .justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.width('100%').height('100%') + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage005.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage005.ets new file mode 100755 index 00000000..72a968bd --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage005.ets @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { image } from '@kit.ImageKit'; +import { buffer } from '@kit.ArkTS'; + +@Entry +@Component +struct UIAttributeFontInterfaceImage005 { + @State image: string | null = null; + @State draggable1: boolean = true; + @State dragPreviewOptions1: DragPreviewOptions | null = null; + @State AVisible: Visibility = Visibility.Visible + + private async getPixmapFromMedia(resource: Resource) { + let unit8Array = await getContext(this)?.resourceManager?.getMediaContent({ + bundleName: resource.bundleName, + moduleName: resource.moduleName, + id: resource.id + }) + let imageSource = image.createImageSource(unit8Array.buffer.slice(0, unit8Array.buffer.byteLength)) + let createPixelMap: image.PixelMap = await imageSource.createPixelMap({ + desiredPixelFormat: image.PixelMapFormat.RGBA_8888 + }) + await imageSource.release() + return createPixelMap + } + + async getBase64() { + let pixelMap = await this.getPixmapFromMedia($r('app.media.caiyuan')) + const imagePackerApi: image.ImagePacker = image.createImagePacker(); + let packOpts: image.PackingOption = { format: 'image/jpeg', quality: 100 }; + imagePackerApi.packing(pixelMap, packOpts).then((data: ArrayBuffer) => { + let buf: buffer.Buffer = buffer.from(data); + this.image = 'data:image/jpeg;base64,' + buf.toString('base64', 0, buf.length); + }) + } + + aboutToAppear(): void { + this.getBase64(); + } + + build() { + Column() { + Row() { + Image(this.image) + .width(100) + .height(100) + .margin({ right: 20 }) + } + }.width('100%').height('100%') + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage006.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage006.ets new file mode 100755 index 00000000..bfd75204 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage006.ets @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { image } from '@kit.ImageKit'; +import { buffer } from '@kit.ArkTS'; +@Entry +@Component +struct UIAttributeFontInterfaceImage006 { + @State image: string | null = null; + @State draggable1: boolean = true; + @State dragPreviewOptions1: DragPreviewOptions | null = null; + @State AVisible: Visibility = Visibility.Visible + + private async getPixmapFromMedia(resource: Resource) { + let unit8Array = await getContext(this)?.resourceManager?.getMediaContent({ + bundleName: resource.bundleName, + moduleName: resource.moduleName, + id: resource.id + }) + let imageSource = image.createImageSource(unit8Array.buffer.slice(0, unit8Array.buffer.byteLength)) + let createPixelMap: image.PixelMap = await imageSource.createPixelMap({ + desiredPixelFormat: image.PixelMapFormat.RGBA_8888 + }) + await imageSource.release() + return createPixelMap + } + async getBase64() { + let pixelMap = await this.getPixmapFromMedia($r('app.media.caiyuan')) + const imagePackerApi: image.ImagePacker = image.createImagePacker(); + let packOpts: image.PackingOption = { format: 'image/jpeg', quality: 100 }; + imagePackerApi.packing(pixelMap, packOpts).then((data: ArrayBuffer) => { + let buf: buffer.Buffer = buffer.from(data); + this.image = 'data:image/jpeg;base64,' + buf.toString('base64', 0, buf.length); + }) + } + + aboutToAppear(): void { + this.getBase64(); + } + build(){ + Column() { + Column() { + Image(this.image) + .width(100) + .height(100) + .margin(20) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: ThemeColorMode.DARK }) { + Column() { + Image(this.image) + .width(100) + .height(100) + } + .justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage0220.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage0220.ets new file mode 100755 index 00000000..7502086d --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage0220.ets @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceCircle0220 { + private modeArr: number[] = [ThemeColorMode.LIGHT, ThemeColorMode.DARK, ThemeColorMode.SYSTEM]; + @State colorMode1: number = ThemeColorMode.LIGHT; + @State colorMode2: number = ThemeColorMode.LIGHT; + @State index1: number = 0; + @State index2: number = 0; + + build() { + WithTheme({ colorMode: this.colorMode1 }) { + Column() { + Image('2.png') + .width(100) + .height(100) + .margin({ top: 10 }) + Image('img.png') + .width(100) + .height(100) + .margin({ top: 10 }) + + WithTheme({ colorMode: this.colorMode2 }) { + Image('cat.jpg') + .width(100) + .height(100) + .margin({ top: 10 }) + } + + Button('Image4++').onClick(() => { + this.colorMode2 = this.modeArr[this.index2]; + if (this.index2 < 2) { + this.index2++; + } + }).margin(5).id('button_0220_01') + Button('Image4--').onClick(() => { + this.colorMode2 = this.modeArr[this.index2]; + if (this.index2 >= 1) { + this.index2--; + } + }).margin(5).id('button_0220_02') + Button('Image5++').onClick(() => { + this.colorMode1 = this.modeArr[this.index1]; + if (this.index1 < 2) { + this.index1++; + } + }).margin(5).id('button_0220_03') + Button('Image5--').onClick(() => { + this.colorMode1 = this.modeArr[this.index1]; + if (this.index1 >= 1) { + this.index1--; + } + }).id('button_0220_04') + + }.justifyContent(FlexAlign.Start).width('100%').height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu001.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu001.ets new file mode 100755 index 00000000..195de68b --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu001.ets @@ -0,0 +1,164 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { CustomTheme, CustomColors, SymbolGlyphModifier } from '@kit.ArkUI'; + +class GreenColors implements CustomColors { + fontPrimary = '#ff049404'; + fontEmphasize = '#FF00541F'; + fontOnPrimary = '#FFFFFFFF'; + compBackgroundTertiary = '#1111FF11'; + backgroundEmphasize = '#FF00541F'; + compEmphasizeSecondary = '#3322FF22'; +} + +class RedColors implements CustomColors { + fontPrimary = '#fff32b3c'; + fontEmphasize = '#FFD53032'; + fontOnPrimary = '#FFFFFFFF'; + compBackgroundTertiary = '#44FF2222'; + backgroundEmphasize = '#FFD00000'; + compEmphasizeSecondary = '#33FF1111'; +} + +class YelloColors implements CustomColors { + fontPrimary = '#FFFF00'; + fontEmphasize = '#FFFF00'; + fontOnPrimary = '#FFFFFFFF'; + compBackgroundTertiary = '#FFFF00'; + backgroundEmphasize = '#FFFF00'; + compEmphasizeSecondary = '#FFFF00'; +} + +class PinkColors implements CustomColors { + fontPrimary = '#FFB6C1'; + fontEmphasize = '#FFB6C1'; + fontOnPrimary = '#FFFFFFFF'; + compBackgroundTertiary = '#FFB6C1'; + backgroundEmphasize = '#FFB6C1'; + compEmphasizeSecondary = '#FFB6C1'; +} + +class PageCustomTheme implements CustomTheme { + colors?: CustomColors; + + constructor(colors: CustomColors) { + this.colors = colors; + } +} + +@Entry +@Component +struct UIAttributeFontInterfaceMenu001 { + @State micIconModifier: SymbolGlyphModifier = new SymbolGlyphModifier($r('sys.symbol.ohos_mic')).fontSize('24vp'); + @State trashIconModifier: SymbolGlyphModifier = new SymbolGlyphModifier($r('sys.symbol.ohos_trash')).fontSize('24vp'); + static readonly themeCount = 3; + @State themeIndex: number = 0; + themeArray: (CustomTheme | undefined)[] = [ + undefined, // System + new PageCustomTheme(new GreenColors()), + new PageCustomTheme(new RedColors()) + ]; + static readonly themeCount1 = 3; + @State themeIndex1: number = 0; + themeArray1: (CustomTheme | undefined)[] = [ + undefined, // System + new PageCustomTheme(new YelloColors()), + new PageCustomTheme(new PinkColors()) + ]; + static readonly themeCount0 = 3; + @State themeIndex0: number = 0; + themeArray0: (CustomTheme | undefined)[] = [ + undefined, // System + new PageCustomTheme(new PinkColors()), + new PageCustomTheme(new GreenColors()) + ]; + + @Builder + SubMenu() { + WithTheme({ theme: this.themeArray1[this.themeIndex1] }) { + Column() { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) + } + }.justifyContent(FlexAlign.Center) + .width('60%') + .backgroundColor($r('sys.color.background_primary')) + } + } + + @Builder + MyMenu() { + WithTheme({ theme: this.themeArray[this.themeIndex] }) { + Column() { + Menu() { + MenuItem({ symbolStartIcon: this.micIconModifier, content: "菜单选项" }) + .enabled(false) + MenuItem({ + symbolStartIcon: this.trashIconModifier, + content: "show WithThemeThree", + builder: (): void => this.SubMenu(), + }) + } + }.justifyContent(FlexAlign.Center) + .width('60%') + .backgroundColor($r('sys.color.background_primary')) + } + } + + build() { + WithTheme({ theme: this.themeArray0[this.themeIndex0] }) { + Column() { + Menu() { + MenuItem({ content: "Menu One" }); + } + .margin('10px'); + + Column() { + Text('click to show WithThemeTwo').id('menu0010_text') + .fontSize(20) + .fontWeight(FontWeight.Bold).borderWidth(5) + } + .bindMenu(this.MyMenu).margin(20) + + Button('Menu++').id('1').fontSize(18) + .margin('10px') + .onClick(() => { + this.themeIndex = (1) % UIAttributeFontInterfaceMenu001.themeCount; + }); + + Button('Menu--').id('2').fontSize(18) + .margin('10px') + .onClick(() => { + this.themeIndex = (2) % UIAttributeFontInterfaceMenu001.themeCount; + }); + + Button('Menu5++').id('3').fontSize(18) + .margin('10px') + .onClick(() => { + this.themeIndex1 = (1) % UIAttributeFontInterfaceMenu001.themeCount1; + }); + + Button('Menu5--').id('4').fontSize(18) + .margin('10px') + .onClick(() => { + this.themeIndex1 = (2) % UIAttributeFontInterfaceMenu001.themeCount1; + }); + }.margin(20) + .width('100%') + .height("100%"); + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu002.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu002.ets new file mode 100755 index 00000000..15d67d7a --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu002.ets @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +@Entry +@Component +struct UIAttributeFontInterfaceMenu002 { + build() { + Column() { + Menu() { + MenuItem({ content: "Menu" }); + } + .margin({ bottom: 10, left: 50 }) + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu003.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu003.ets new file mode 100755 index 00000000..38d46b37 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu003.ets @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceMenu003 { + build() { + Column() { + Column() { + Menu() { + MenuItem({ content: "菜单选项1" }); + } + .margin({ bottom: 10 }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: ThemeColorMode.SYSTEM }) { + Column() { + Menu() { + MenuItem({ content: "菜单选项2" }); + } + .margin({ bottom: 10 }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu004.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu004.ets new file mode 100755 index 00000000..3f82cd57 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu004.ets @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +@Entry +@Component +struct UIAttributeFontInterfaceMenu004 { + build() { + Column() { + Column() { + Menu() { + MenuItem({ content: "菜单选项1" }); + } + .margin({ bottom: 10 }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: ThemeColorMode.DARK }) { + Column() { + Menu() { + MenuItem({ content: "菜单选项2" }); + } + .margin({ bottom: 10 }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu005.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu005.ets new file mode 100755 index 00000000..47b4af1c --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu005.ets @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +@Entry +@Component +struct UIAttributeFontInterfaceMenu005 { + build() { + Column() { + Column() { + Menu() { + MenuItem({ content: "菜单选项1" }); + } + .margin({ bottom: 10 }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: undefined }) { + Column() { + Menu() { + MenuItem({ content: "菜单选项2" }); + } + .margin({ bottom: 10 }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu006.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu006.ets new file mode 100755 index 00000000..e56fea97 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu006.ets @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +@Entry +@Component +struct UIAttributeFontInterfaceMenu006 { + build() { + Column() { + Column() { + Menu() { + MenuItem({ content: "菜单选项1" }); + } + .margin({ bottom: 10 }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: null }) { + Column() { + Menu() { + MenuItem({ content: "菜单选项2" }); + } + .margin({ bottom: 10 }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu007.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu007.ets new file mode 100755 index 00000000..d799dcb6 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu007.ets @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +@Entry +@Component +struct UIAttributeFontInterfaceMenu007 { + build() { + Column() { + Column() { + Menu() { + MenuItem({ content: "菜单选项1" }); + } + .margin({ bottom: 10 }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: ThemeColorMode.LIGHT }) { + Column() { + Menu() { + MenuItem({ content: "菜单选项2" }); + } + .margin({ bottom: 10 }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup001.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup001.ets new file mode 100755 index 00000000..6f4c2e35 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup001.ets @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { Popup, PopupTextOptions, PopupButtonOptions, PopupIconOptions } from '@kit.ArkUI'; + +@Entry +@Component +struct UIAttributeFontInterfacePopup001 { + build() { + Column() { + Column() { + // popup 自定义高级组件 + Popup({ + // PopupTextOptions 类型设置文字内容 + title: { + text: 'This is a popup with PopupOptions', + fontSize: 25, + fontWeight: FontWeight.Normal + } as PopupTextOptions, + //PopupTextOptions 类型设置文字内容 + message: { + text: 'This is the message', + fontSize: 25, + } as PopupTextOptions, + }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: undefined }) { + Column() { + Popup({ + // PopupTextOptions 类型设置文字内容 + title: { + text: 'This is a popup with PopupOptions', + fontSize: 25, + fontWeight: FontWeight.Normal + } as PopupTextOptions, + //PopupTextOptions 类型设置文字内容 + message: { + text: 'This is the message', + fontSize: 25, + } as PopupTextOptions, + }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup002.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup002.ets new file mode 100755 index 00000000..d5dd32b2 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup002.ets @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { Popup, PopupTextOptions, PopupButtonOptions, PopupIconOptions } from '@kit.ArkUI'; + +@Entry +@Component +struct UIAttributeFontInterfacePopup002 { + build() { + Column() { + Popup({ + title: { + text: 'This is a popup with PopupOptions', + fontSize: 25, + fontWeight: FontWeight.Normal + } as PopupTextOptions, + message: { + text: 'This is the message', + fontSize: 25, + } as PopupTextOptions, + }) + } + .justifyContent(FlexAlign.Center).width("100%").height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup003.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup003.ets new file mode 100755 index 00000000..7fa4b368 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup003.ets @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { Popup, PopupTextOptions, PopupButtonOptions, PopupIconOptions } from '@kit.ArkUI'; + +@Entry +@Component +struct UIAttributeFontInterfacePopup003 { + build() { + Column() { + Column() { + // popup 自定义高级组件 + Popup({ + // PopupTextOptions 类型设置文字内容 + title: { + text: 'This is a popup with PopupOptions', + fontSize: 25, + fontWeight: FontWeight.Normal + } as PopupTextOptions, + //PopupTextOptions 类型设置文字内容 + message: { + text: 'This is the message', + fontSize: 25, + } as PopupTextOptions, + }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: ThemeColorMode.DARK }) { + Column() { + Popup({ + // PopupTextOptions 类型设置文字内容 + title: { + text: 'This is a popup with PopupOptions', + fontSize: 25, + fontWeight: FontWeight.Normal + } as PopupTextOptions, + //PopupTextOptions 类型设置文字内容 + message: { + text: 'This is the message', + fontSize: 25, + } as PopupTextOptions, + }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup004.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup004.ets new file mode 100755 index 00000000..3cc956f6 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup004.ets @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { Popup, PopupTextOptions, PopupButtonOptions, PopupIconOptions } from '@kit.ArkUI'; + +@Entry +@Component +struct UIAttributeFontInterfacePopup004 { + build() { + Column() { + Column() { + // popup 自定义高级组件 + Popup({ + // PopupTextOptions 类型设置文字内容 + title: { + text: 'This is a popup with PopupOptions', + fontSize: 25, + fontWeight: FontWeight.Normal + } as PopupTextOptions, + //PopupTextOptions 类型设置文字内容 + message: { + text: 'This is the message', + fontSize: 25, + } as PopupTextOptions, + }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: ThemeColorMode.SYSTEM }) { + Column() { + Popup({ + // PopupTextOptions 类型设置文字内容 + title: { + text: 'This is a popup with PopupOptions', + fontSize: 25, + fontWeight: FontWeight.Normal + } as PopupTextOptions, + //PopupTextOptions 类型设置文字内容 + message: { + text: 'This is the message', + fontSize: 25, + } as PopupTextOptions, + }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup005.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup005.ets new file mode 100755 index 00000000..79d8039a --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup005.ets @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { Popup, PopupTextOptions, PopupButtonOptions, PopupIconOptions } from '@kit.ArkUI'; + +@Entry +@Component +struct UIAttributeFontInterfacePopup005 { + build() { + Column() { + Column() { + // popup 自定义高级组件 + Popup({ + // PopupTextOptions 类型设置文字内容 + title: { + text: 'This is a popup with PopupOptions', + fontSize: 25, + fontWeight: FontWeight.Normal + } as PopupTextOptions, + //PopupTextOptions 类型设置文字内容 + message: { + text: 'This is the message', + fontSize: 25, + } as PopupTextOptions, + }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: ThemeColorMode.LIGHT }) { + Column() { + Popup({ + // PopupTextOptions 类型设置文字内容 + title: { + text: 'This is a popup with PopupOptions', + fontSize: 25, + fontWeight: FontWeight.Normal + } as PopupTextOptions, + //PopupTextOptions 类型设置文字内容 + message: { + text: 'This is the message', + fontSize: 25, + } as PopupTextOptions, + }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup006.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup006.ets new file mode 100755 index 00000000..65ce7e25 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup006.ets @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { Popup, PopupTextOptions, PopupButtonOptions, PopupIconOptions } from '@kit.ArkUI'; + +@Entry +@Component +struct UIAttributeFontInterfacePopup006 { + build() { + Column() { + Column() { + // popup 自定义高级组件 + Popup({ + // PopupTextOptions 类型设置文字内容 + title: { + text: 'This is a popup with PopupOptions', + fontSize: 25, + fontWeight: FontWeight.Normal + } as PopupTextOptions, + //PopupTextOptions 类型设置文字内容 + message: { + text: 'This is the message', + fontSize: 25, + } as PopupTextOptions, + }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: null }) { + Column() { + Popup({ + // PopupTextOptions 类型设置文字内容 + title: { + text: 'This is a popup with PopupOptions', + fontSize: 25, + fontWeight: FontWeight.Normal + } as PopupTextOptions, + //PopupTextOptions 类型设置文字内容 + message: { + text: 'This is the message', + fontSize: 25, + } as PopupTextOptions, + }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup007.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup007.ets new file mode 100755 index 00000000..d2a61c94 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup007.ets @@ -0,0 +1,130 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { Popup, PopupTextOptions, PopupButtonOptions, PopupIconOptions } from '@kit.ArkUI'; +import { CustomTheme, CustomColors } from '@kit.ArkUI'; + +class GreenColors implements CustomColors { + fontPrimary = '#ff049404'; + fontEmphasize = '#FF00541F'; + fontOnPrimary = '#FFFFFFFF'; + compBackgroundTertiary = '#1111FF11'; + backgroundEmphasize = '#FF00541F'; + compEmphasizeSecondary = '#3322FF22'; +} + +class RedColors implements CustomColors { + fontPrimary = '#fff32b3c'; + fontEmphasize = '#FFD53032'; + fontOnPrimary = '#FFFFFFFF'; + compBackgroundTertiary = '#44FF2222'; + backgroundEmphasize = '#FFD00000'; + compEmphasizeSecondary = '#33FF1111'; +} + +class YelloColors implements CustomColors { + fontPrimary = '#FFFF00'; + fontEmphasize = '#FFFF00'; + fontOnPrimary = '#FFFFFFFF'; + compBackgroundTertiary = '#FFFF00'; + backgroundEmphasize = '#FFFF00'; + compEmphasizeSecondary = '#FFFF00'; +} + +class BlueColors implements CustomColors { + fontPrimary = '#0000FF'; + fontEmphasize = '#0000FF'; + fontOnPrimary = '#FFFFFFFF'; + compBackgroundTertiary = '#0000FF'; + backgroundEmphasize = '#0000FF'; + compEmphasizeSecondary = '#0000FF'; +} + +class PageCustomTheme implements CustomTheme { + colors?: CustomColors; + + constructor(colors: CustomColors) { + this.colors = colors; + } +} + +@Entry +@Component +struct UIAttributeFontInterfacePopup007 { + static readonly themeCount = 3; + @State themeIndex: number = 0; + themeArray: (CustomTheme | undefined)[] = [ + undefined, + new PageCustomTheme(new GreenColors()), + new PageCustomTheme(new RedColors()) + ]; + static readonly themeCount1 = 3; + @State themeIndex1: number = 0; + themeArray1: (CustomTheme | undefined)[] = [ + undefined, + new PageCustomTheme(new YelloColors()), + new PageCustomTheme(new BlueColors()) + ]; + + build() { + Column() { + Popup({ + message: { + text: 'This is the message', + fontSize: 25, + } as PopupTextOptions, + }) + WithTheme({ theme: this.themeArray[this.themeIndex] }) { + Column({ space: 10 }) { + Popup({ + message: { + text: 'This is the WithTheme2', + fontSize: 25, + } as PopupTextOptions, + }) + WithTheme({ theme: this.themeArray1[this.themeIndex1] }) { + Popup({ + message: { + text: 'This is the WithTheme3', + fontSize: 25, + } as PopupTextOptions, + }) + } + + }.justifyContent(FlexAlign.Center).width("100%").height("40%") + } + + Button('Popup4++').id('1') + .margin('10px') + .onClick(() => { + this.themeIndex = (1) % UIAttributeFontInterfacePopup007.themeCount; + }); + Button('Popup4--').id('2') + .margin('10px') + .onClick(() => { + this.themeIndex = (2) % UIAttributeFontInterfacePopup007.themeCount; + }); + Button('Popup5++').id('3') + .margin('10px') + .onClick(() => { + this.themeIndex1 = (1) % UIAttributeFontInterfacePopup007.themeCount1; + }); + Button('Popup5--').id('4') + .margin('10px') + .onClick(() => { + this.themeIndex1 = (2) % UIAttributeFontInterfacePopup007.themeCount1; + }); + }.justifyContent(FlexAlign.Center).width("100%").height("100%") + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider001.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider001.ets new file mode 100755 index 00000000..713f062c --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider001.ets @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIAttributeFontInterfaceSlider001 { + @State outSetValueOne: number = 40 + + build() { + Column() { + Column() { + Slider({ + value: this.outSetValueOne, + min: 0, + max: 100, + style: SliderStyle.OutSet + }) + .showTips(true) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: ThemeColorMode.LIGHT }) { + Column() { + Slider({ + value: this.outSetValueOne, + min: 0, + max: 100, + style: SliderStyle.OutSet + }) + .showTips(true) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider002.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider002.ets new file mode 100755 index 00000000..7c2a9b65 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider002.ets @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIAttributeFontInterfaceSlider002 { + @State outSetValueOne: number = 40 + build(){ + Column(){ + Slider({ + value: this.outSetValueOne, + min: 0, + max: 100, + style: SliderStyle.OutSet + }) + .showTips(true) + WithTheme({ colorMode:null}) { + Slider({ + value: this.outSetValueOne, + min: 0, + max: 100, + style: SliderStyle.OutSet + }) + .showTips(true) + } + }.justifyContent(FlexAlign.Center).width("100%").height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider003.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider003.ets new file mode 100755 index 00000000..4b01c153 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider003.ets @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIAttributeFontInterfaceSlider003 { + @State outSetValueOne: number = 40 + build(){ + Column() { + Column() { + Slider({ + value: this.outSetValueOne, + min: 0, + max: 100, + style: SliderStyle.OutSet + }) + .showTips(true) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: ThemeColorMode.DARK }) { + Column() { + Slider({ + value: this.outSetValueOne, + min: 0, + max: 100, + style: SliderStyle.OutSet + }) + .showTips(true) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider004.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider004.ets new file mode 100755 index 00000000..762d699b --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider004.ets @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIAttributeFontInterfaceSlider004 { + @State outSetValueOne: number = 40 + build(){ + Column(){ + Slider({ + value: this.outSetValueOne, + min: 0, + max: 100, + style: SliderStyle.OutSet + }) + .showTips(true) + }.justifyContent(FlexAlign.Center).width("100%").height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider005.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider005.ets new file mode 100755 index 00000000..68ddc063 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider005.ets @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIAttributeFontInterfaceSlider005 { + @State outSetValueOne: number = 40 + build(){ + Column() { + Column() { + Slider({ + value: this.outSetValueOne, + min: 0, + max: 100, + style: SliderStyle.OutSet + }) + .showTips(true) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: ThemeColorMode.LIGHT }) { + Column() { + Slider({ + value: this.outSetValueOne, + min: 0, + max: 100, + style: SliderStyle.OutSet + }) + .showTips(true) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider006.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider006.ets new file mode 100755 index 00000000..b804b2f8 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider006.ets @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIAttributeFontInterfaceSlider006 { + @State outSetValueOne: number = 40 + build(){ + Column() { + Column() { + Slider({ + value: this.outSetValueOne, + min: 0, + max: 100, + style: SliderStyle.OutSet + }) + .showTips(true) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: ThemeColorMode.SYSTEM }) { + Column() { + Slider({ + value: this.outSetValueOne, + min: 0, + max: 100, + style: SliderStyle.OutSet + }) + .showTips(true) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider007.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider007.ets new file mode 100755 index 00000000..0eb47add --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider007.ets @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIAttributeFontInterfaceSlider007 { + @State outSetValueOne: number = 40 + build(){ + Column() { + Column() { + Slider({ + value: this.outSetValueOne, + min: 0, + max: 100, + style: SliderStyle.OutSet + }) + .showTips(true) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: undefined }) { + Column() { + Slider({ + value: this.outSetValueOne, + min: 0, + max: 100, + style: SliderStyle.OutSet + }) + .showTips(true) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider0180.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider0180.ets new file mode 100755 index 00000000..448fd449 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider0180.ets @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceSlider0180 { + private modeArr: number[] = [ThemeColorMode.LIGHT, ThemeColorMode.DARK, ThemeColorMode.SYSTEM]; + @State colorMode1: number = ThemeColorMode.LIGHT; + @State colorMode2: number = ThemeColorMode.LIGHT; + @State index1: number = 0; + @State index2: number = 0; + + build() { + WithTheme({ colorMode: this.colorMode1 }) { + Column() { + Slider({ + min: 0, + max: 100, + value: 60, + style: SliderStyle.OutSet + }).showTips(true).margin(10) + Slider({ + min: 0, + max: 100, + value: 40, + style: SliderStyle.OutSet + }).showTips(true) + + WithTheme({ colorMode: this.colorMode2 }) { + Slider({ + min: 0, + max: 100, + value: 20, + style: SliderStyle.OutSet + }).showTips(true) + } + + Button('Slider4++').onClick(() => { + this.colorMode2 = this.modeArr[this.index2]; + if (this.index2 < 2) { + this.index2++; + } + }).margin(5).id('button_0180_01') + Button('Slider4--').onClick(() => { + this.colorMode2 = this.modeArr[this.index2]; + if (this.index2 >= 1) { + this.index2--; + } + }).margin(5).id('button_0180_02') + Button('Slider5++').onClick(() => { + this.colorMode1 = this.modeArr[this.index1]; + if (this.index1 < 2) { + this.index1++; + } + }).margin(5).id('button_0180_03') + Button('Slider5--').onClick(() => { + this.colorMode1 = this.modeArr[this.index1]; + if (this.index1 >= 1) { + this.index1--; + } + }).id('button_0180_04') + + }.justifyContent(FlexAlign.Start).width('100%').height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText001.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText001.ets new file mode 100755 index 00000000..ed489892 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText001.ets @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIAttributeFontInterfaceText001 { + build(){ + Column() { + Column() { + Text('textAlign').fontSize(20) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: ThemeColorMode.LIGHT }) { + Column() { + Text('textAlign').fontSize(20) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText002.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText002.ets new file mode 100755 index 00000000..dfb61646 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText002.ets @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIAttributeFontInterfaceText002 { + build(){ + Column(){ + Row() { + Text('textAlign').fontSize(20) + } + }.width('100%').height('100%').justifyContent(FlexAlign.Center) + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText003.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText003.ets new file mode 100755 index 00000000..5dd176a0 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText003.ets @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIAttributeFontInterfaceText003 { + build(){ + Column() { + Column() { + Text('textAlign').fontSize(20) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: undefined }) { + Column() { + Text('textAlign').fontSize(20) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText004.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText004.ets new file mode 100755 index 00000000..41be5610 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText004.ets @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIAttributeFontInterfaceText004 { + @State colorMode1:ThemeColorMode | undefined = undefined; + @State colorMode2:ThemeColorMode | undefined = undefined; + + build(){ + Column({space:10}) { + Column() { + Text('Text1').fontSize(20) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('20%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: this.colorMode1 }) { + Column() { + Text('Text2').fontSize(35) + WithTheme({ colorMode: this.colorMode2 }) { + Column() { + Text('Text3').fontSize(25) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('20%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('50%').backgroundColor($r('sys.color.background_primary')) + } + + Button('Text4++').id('btn1').onClick(()=>{ + this.colorMode1 = ThemeColorMode.LIGHT; + }) + Button('Text4--').id('btn2').onClick(()=>{ + this.colorMode1 = ThemeColorMode.DARK; + }) + Button('Text5++').id('btn3').onClick(()=>{ + this.colorMode2 = ThemeColorMode.LIGHT; + }) + Button('Text5--').id('btn4').onClick(()=>{ + this.colorMode2 = ThemeColorMode.DARK; + }) + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText005.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText005.ets new file mode 100755 index 00000000..66239593 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText005.ets @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIAttributeFontInterfaceText005 { + build(){ + Column() { + Column() { + Text('textAlign').fontSize(20) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: null }) { + Column() { + Text('textAlign').fontSize(20) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText0140.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText0140.ets new file mode 100755 index 00000000..f1f36828 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText0140.ets @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceText0140 { + build() { + Column() { + Text('This test text not in WithTheme').margin({ top: 10 }) + WithTheme({ colorMode: ThemeColorMode.DARK }) { + Text('This test text in WithThemeTwo') + .margin({ top: 10 }) + } + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText0200.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText0200.ets new file mode 100755 index 00000000..1e15bee7 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText0200.ets @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceText0200 { + build() { + Column() { + Text('This test text not in WithTheme').margin({ top: 10 }) + WithTheme({ colorMode: ThemeColorMode.SYSTEM }) { + Text('This test text in WithThemeTwo') + .margin({ top: 10 }) + } + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo001.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo001.ets new file mode 100755 index 00000000..4166704c --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo001.ets @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIAttributeFontInterfaceVideo001 { + @State videoSrc: Resource = $rawfile('video1.ts') + @State previewUri: Resource = $r('app.media.caiyuan') + @State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X + @State isAutoPlay: boolean = false + @State showControls: boolean = true + controller: VideoController = new VideoController() + build(){ + Column() { + Column() { + Video({ + src: this.videoSrc, + previewUri: this.previewUri, + currentProgressRate: this.curRate, + controller: this.controller + }) + .width('60%') + .height(200) + .margin({top:50}) + .autoPlay(this.isAutoPlay) + .controls(this.showControls) + .onStart(() => { + console.info('onStart') + }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: ThemeColorMode.SYSTEM }) { + Column() { + Video({ + src: this.videoSrc, + previewUri: this.previewUri, + currentProgressRate: this.curRate, + controller: this.controller + }) + .width('60%') + .height(200) + .margin({top:50}) + .autoPlay(this.isAutoPlay) + .controls(this.showControls) + .onStart(() => { + console.info('onStart') + }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo002.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo002.ets new file mode 100755 index 00000000..c32a36a9 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo002.ets @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIAttributeFontInterfaceVideo002 { + @State videoSrc: Resource = $rawfile('video1.ts') + @State previewUri: Resource = $r('app.media.caiyuan') + @State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X + @State isAutoPlay: boolean = false + @State showControls: boolean = true + controller: VideoController = new VideoController() + build(){ + Column() { + Column() { + Video({ + src: this.videoSrc, + previewUri: this.previewUri, + currentProgressRate: this.curRate, + controller: this.controller + }) + .width('60%') + .height(200) + .margin({top:50}) + .autoPlay(this.isAutoPlay) + .controls(this.showControls) + .onStart(() => { + console.info('onStart') + }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: null }) { + Column() { + Video({ + src: this.videoSrc, + previewUri: this.previewUri, + currentProgressRate: this.curRate, + controller: this.controller + }) + .width('60%') + .height(200) + .margin({top:50}) + .autoPlay(this.isAutoPlay) + .controls(this.showControls) + .onStart(() => { + console.info('onStart') + }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo003.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo003.ets new file mode 100755 index 00000000..96124124 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo003.ets @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceVideo003 { + @State videoSrc: Resource = $rawfile('video1.ts') + @State previewUri: Resource = $r('app.media.caiyuan') + @State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X + @State isAutoPlay: boolean = false + @State showControls: boolean = true + controller: VideoController = new VideoController() + build(){ + Column() { + Video({ + src: this.videoSrc, + previewUri: this.previewUri, + currentProgressRate: this.curRate, + controller: this.controller + }) + .width('60%') + .height(200) + .margin({top:50}) + .autoPlay(this.isAutoPlay) + .controls(this.showControls) + .onStart(() => { + console.info('onStart') + }) + }.width('100%').height('100%').justifyContent(FlexAlign.Center) + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo004.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo004.ets new file mode 100755 index 00000000..0440d972 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo004.ets @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceVideo004 { + @State videoSrc: Resource = $rawfile('video1.ts') + @State previewUri: Resource = $r('app.media.caiyuan') + @State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X + @State isAutoPlay: boolean = false + @State showControls: boolean = true + controller: VideoController = new VideoController() + build(){ + Column() { + Column() { + Video({ + src: this.videoSrc, + previewUri: this.previewUri, + currentProgressRate: this.curRate, + controller: this.controller + }) + .width('60%') + .height(200) + .margin({top:50}) + .autoPlay(this.isAutoPlay) + .controls(this.showControls) + .onStart(() => { + console.info('onStart') + }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: undefined }) { + Column() { + Video({ + src: this.videoSrc, + previewUri: this.previewUri, + currentProgressRate: this.curRate, + controller: this.controller + }) + .width('60%') + .height(200) + .margin({top:50}) + .autoPlay(this.isAutoPlay) + .controls(this.showControls) + .onStart(() => { + console.info('onStart') + }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo005.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo005.ets new file mode 100755 index 00000000..74ffabdc --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo005.ets @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceVideo005 { + @State videoSrc: Resource = $rawfile('video1.ts') + @State previewUri: Resource = $r('app.media.caiyuan') + @State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X + @State isAutoPlay: boolean = false + @State showControls: boolean = true + controller: VideoController = new VideoController() + build(){ + Column() { + Column() { + Video({ + src: this.videoSrc, + previewUri: this.previewUri, + currentProgressRate: this.curRate, + controller: this.controller + }) + .width('60%') + .height(200) + .margin({top:50}) + .autoPlay(this.isAutoPlay) + .controls(this.showControls) + .onStart(() => { + console.info('onStart') + }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: ThemeColorMode.LIGHT }) { + Column() { + Video({ + src: this.videoSrc, + previewUri: this.previewUri, + currentProgressRate: this.curRate, + controller: this.controller + }) + .width('60%') + .height(200) + .margin({top:50}) + .autoPlay(this.isAutoPlay) + .controls(this.showControls) + .onStart(() => { + console.info('onStart') + }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo006.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo006.ets new file mode 100755 index 00000000..a162b10d --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo006.ets @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceVideo006 { + @State videoSrc: Resource = $rawfile('video1.ts') + @State previewUri: Resource = $r('app.media.caiyuan') + @State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X + @State isAutoPlay: boolean = false + @State showControls: boolean = true + controller: VideoController = new VideoController() + build(){ + Column() { + Column() { + Video({ + src: this.videoSrc, + previewUri: this.previewUri, + currentProgressRate: this.curRate, + controller: this.controller + }) + .width('60%') + .height(200) + .margin({top:50}) + .autoPlay(this.isAutoPlay) + .controls(this.showControls) + .onStart(() => { + console.info('onStart') + }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: ThemeColorMode.DARK }) { + Column() { + Video({ + src: this.videoSrc, + previewUri: this.previewUri, + currentProgressRate: this.curRate, + controller: this.controller + }) + .width('60%') + .height(200) + .margin({top:50}) + .autoPlay(this.isAutoPlay) + .controls(this.showControls) + .onStart(() => { + console.info('onStart') + }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('40%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo007.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo007.ets new file mode 100755 index 00000000..3818a933 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo007.ets @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIAttributeFontInterfaceVideo007 { + @State videoSrc: Resource = $rawfile('video1.ts') + @State previewUri: Resource = $r('app.media.caiyuan') + @State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X + @State isAutoPlay: boolean = false + @State showControls: boolean = true + controller: VideoController = new VideoController() + @State colorMode1: ThemeColorMode | undefined = undefined; + @State colorMode2: ThemeColorMode | undefined = undefined; + + build() { + Column({ space: 10 }) { + Column() { + Video({ + src: this.videoSrc, + previewUri: this.previewUri, + currentProgressRate: this.curRate, + controller: this.controller + }) + .width('60%') + .height(100) + .margin({ top: 50 }) + .autoPlay(this.isAutoPlay) + .controls(this.showControls) + .onStart(() => { + console.info('onStart') + }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('20%').backgroundColor($r('sys.color.background_primary')) + + WithTheme({ colorMode: this.colorMode1 }) { + Column() { + Video({ + src: this.videoSrc, + previewUri: this.previewUri, + currentProgressRate: this.curRate, + controller: this.controller + }) + .width('60%') + .height(100) + .margin({ top: 50 }) + .autoPlay(this.isAutoPlay) + .controls(this.showControls) + .onStart(() => { + console.info('onStart') + }) + WithTheme({ colorMode: this.colorMode2 }) { + Column() { + Video({ + src: this.videoSrc, + previewUri: this.previewUri, + currentProgressRate: this.curRate, + controller: this.controller + }) + .width('60%') + .height(100) + .margin({ top: 50 }) + .autoPlay(this.isAutoPlay) + .controls(this.showControls) + .onStart(() => { + console.info('onStart') + }) + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('20%').backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center) + .width('100%') + .height('50%').backgroundColor($r('sys.color.background_primary')) + } + + Button('video4++').id('btn1').onClick(() => { + this.colorMode1 = ThemeColorMode.LIGHT; + }) + Button('video4--').id('btn2').onClick(() => { + this.colorMode1 = ThemeColorMode.DARK; + }) + Button('video5++').id('btn3').onClick(() => { + this.colorMode2 = ThemeColorMode.LIGHT; + }) + Button('video5--').id('btn4').onClick(() => { + this.colorMode2 = ThemeColorMode.DARK; + }) + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0230.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0230.ets new file mode 100755 index 00000000..1d73f031 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0230.ets @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +@Entry +@Component +struct UIComponentPopupBoxActionsheetInterfaceReplacement0230 { + @State msg: string = ''; + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Button('show ActionSheet') + .id('show') + .onClick(() => { + ActionSheet.show({ + title: 'title', + message: 'message', + alignment: DialogAlignment.Bottom, + confirm: { + defaultFocus: true, + value: 'ConfirmButton', + action: () => { + this.msg = 'Confirm is done'; + } + }, + sheets: [ + { + title: 'apple', + icon: 'cat.jpg', + action: () => { + } + } + ] + }) + }) + Text(this.msg) + } + .width('100%') + .height('100%') + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0270.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0270.ets new file mode 100755 index 00000000..f2abb26b --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0270.ets @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +@Entry +@Component +struct UIComponentPopupBoxActionsheetInterfaceReplacement0270 { + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Button('show ActionSheet') + .id('show') + .onClick(() => { + ActionSheet.show({ + title: 'title', + message: 'message', + alignment: DialogAlignment.Bottom, + sheets: [ + { + title: getContext().resourceManager.getStringSync($r('app.string.span')), + action: () => { + } + } + ] + }) + }) + } + .width('100%') + .height('100%') + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0280.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0280.ets new file mode 100755 index 00000000..d0c4a6c5 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0280.ets @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +@Entry +@Component +struct UIComponentPopupBoxActionsheetInterfaceReplacement0280 { + @State msg: string = ''; + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Button('show ActionSheet') + .id('show') + .onClick(() => { + ActionSheet.show({ + title: 'title', + message: 'message', + alignment: DialogAlignment.Bottom, + cancel: () => { + this.msg = 'cancle is done'; + }, + sheets: [ + { + title: getContext().resourceManager.getStringSync($r('app.string.span')), + action: () => { + } + } + ] + }) + }) + Text(this.msg) + } + .width('100%') + .height('100%') + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0290.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0290.ets new file mode 100755 index 00000000..fdf97918 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0290.ets @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +@Entry +@Component +struct UIComponentPopupBoxActionsheetInterfaceReplacement0290 { + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Button('show ActionSheet') + .id('show') + .onClick(() => { + ActionSheet.show({ + title: 'title', + message: 'message', + alignment: DialogAlignment.Bottom, + sheets: [ + { + title: 'apple', + action: () => { + } + } + ] + }) + }) + } + .width('100%') + .height('100%') + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0300.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0300.ets new file mode 100755 index 00000000..9da3c235 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0300.ets @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +@Entry +@Component +struct UIComponentPopupBoxActionsheetInterfaceReplacement0300 { + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Button('show ActionSheet') + .id('show') + .onClick(() => { + ActionSheet.show({ + title: 'title', + message: 'message', + alignment: DialogAlignment.Bottom, + width:'100%', + height:400, + sheets: [ + { + title: 'apple', + icon: 'cat.jpg', + action: () => { + } + }, + { + title: 'apple1', + icon: 'cat.jpg', + action: () => { + } + }, + { + title: 'apple2', + icon: 'cat.jpg', + action: () => { + } + }, + { + title: 'apple3', + icon: 'cat.jpg', + action: () => { + } + }, + { + title: 'apple4', + icon: 'cat.jpg', + action: () => { + } + }, + { + title: 'apple5', + icon: 'cat.jpg', + action: () => { + } + }, + { + title: 'apple6', + icon: 'cat.jpg', + action: () => { + } + }, + { + title: 'apple7', + icon: 'cat.jpg', + action: () => { + } + }, + { + title: 'apple8', + icon: 'cat.jpg', + action: () => { + } + }, + { + title: 'apple9', + icon: 'cat.jpg', + action: () => { + } + } + ] + }) + }) + } + .width('100%') + .height('100%') + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0310.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0310.ets new file mode 100755 index 00000000..22d7c48a --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0310.ets @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +@Entry +@Component +struct UIComponentPopupBoxActionsheetInterfaceReplacement0310 { + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Button('show ActionSheet') + .id('show') + .onClick(() => { + ActionSheet.show({ + title: 'title', + message: 'message', + alignment: DialogAlignment.Bottom, + sheets: [ + { + icon:$r('app.media.cat'), + title: 'apple', + action: () => { + } + } + ] + }) + }) + } + .width('100%') + .height('100%') + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0320.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0320.ets new file mode 100755 index 00000000..9e453381 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0320.ets @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +@Entry +@Component +struct UIComponentPopupBoxActionsheetInterfaceReplacement0320 { + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Button('show ActionSheet') + .id('show') + .onClick(() => { + ActionSheet.show({ + title: 'title', + message: 'message', + alignment: DialogAlignment.Bottom, + sheets: [ + { + title: 'apple', + icon: 'cat.jpg', + action: () => { + } + } + ] + }) + }) + } + .width('100%') + .height('100%') + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0130.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0130.ets new file mode 100755 index 00000000..d01c3ec1 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0130.ets @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIComponentPopupBoxAlertDialogInterfaceReplacement0130 { + @State msg : string = ''; + build() { + Column({ space: 2 }) { + Button('one button dialog') + .id('show') + .onClick(() => { + AlertDialog.show( + { + title: 'title', + message: 'text', + autoCancel: true, + alignment: DialogAlignment.CenterStart, + gridCount: 100, + cancel: () => { + this.msg = 'cancel is done'; + }, + } + ) + }).backgroundColor(0x317aff) + Text(this.msg) + }.width('100%').margin({ bottom: 50 }) + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0140.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0140.ets new file mode 100755 index 00000000..5bc34c3d --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0140.ets @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIComponentPopupBoxAlertDialogInterfaceReplacement0140 { + build() { + Column({ space: 2 }) { + Button('two buttons dialog') + .id('show') + .onClick(() => { + AlertDialog.show( + { + title: 'title', + message: 'text', + autoCancel: true, + alignment: DialogAlignment.CenterStart, + gridCount:-1, + primaryButton: { + value: 'ok', + enabled: true, + defaultFocus: true, + style: DialogButtonStyle.HIGHLIGHT, + action: () => { + } + }, + secondaryButton: { + enabled: true, + defaultFocus: true, + style: DialogButtonStyle.HIGHLIGHT, + value: 'cancel', + action: () => { + } + }, + } + ) + }).backgroundColor(0x317aff) + }.width('100%').margin({ bottom: 50 }) + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0230.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0230.ets new file mode 100755 index 00000000..a3990d7f --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0230.ets @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIComponentPopupBoxAlertDialogInterfaceReplacement0230 { + build() { + Column({ space: 2 }) { + Button('two buttons dialog') + .id('show') + .onClick(() => { + AlertDialog.show( + { + title: 'title', + message: 'text', + autoCancel: true, + alignment: DialogAlignment.CenterStart, + offset: { dx: getContext().resourceManager.getStringSync($r('app.string.10vp')), dy: getContext().resourceManager.getStringSync($r('app.string.10vp')) }, + primaryButton: { + value: 'ok', + enabled: true, + defaultFocus: true, + style: DialogButtonStyle.HIGHLIGHT, + action: () => { + } + }, + secondaryButton: { + enabled: true, + defaultFocus: true, + style: DialogButtonStyle.HIGHLIGHT, + value: 'cancel', + action: () => { + } + }, + } + ) + }).backgroundColor(0x317aff) + }.width('100%').margin({ bottom: 50 }) + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0240.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0240.ets new file mode 100755 index 00000000..0d9e33bd --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0240.ets @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIComponentPopupBoxAlertDialogInterfaceReplacement0240 { + build() { + Column({ space: 2 }) { + Button('two buttons dialog') + .id('show') + .onClick(() => { + AlertDialog.show( + { + title: 'title', + message: 'text', + autoCancel: true, + alignment: DialogAlignment.CenterStart, + offset: { dx: '', dy: '' }, + primaryButton: { + value: 'ok', + enabled: true, + defaultFocus: true, + style: DialogButtonStyle.HIGHLIGHT, + action: () => { + } + }, + secondaryButton: { + enabled: true, + defaultFocus: true, + style: DialogButtonStyle.HIGHLIGHT, + value: 'cancel', + action: () => { + } + }, + } + ) + }).backgroundColor(0x317aff) + }.width('100%').margin({ bottom: 50 }) + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0270.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0270.ets new file mode 100755 index 00000000..b81e4774 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0270.ets @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIComponentPopupBoxAlertDialogInterfaceReplacement0270 { + @State msg: string = ''; + + build() { + Column({ space: 2 }) { + Button('two buttons dialog') + .id('show') + .onClick(() => { + AlertDialog.show( + { + title: 'title', + message: 'text', + autoCancel: true, + alignment: DialogAlignment.CenterStart, + primaryButton: { + value: 'primaryButton', + enabled: true, + defaultFocus: true, + style: DialogButtonStyle.HIGHLIGHT, + action: () => { + this.msg = 'primaryButton is done'; + } + }, + secondaryButton: { + enabled: true, + defaultFocus: true, + style: DialogButtonStyle.HIGHLIGHT, + value: 'cancel', + action: () => { + } + }, + } + ) + }).backgroundColor(0x317aff) + Text(this.msg) + }.width('100%').margin({ bottom: 50 }) + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0280.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0280.ets new file mode 100755 index 00000000..b7c46b38 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0280.ets @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIComponentPopupBoxAlertDialogInterfaceReplacement0280 { + @State msg : string = ''; + build() { + Column({ space: 2 }) { + Button('two buttons dialog') + .id('show') + .onClick(() => { + AlertDialog.show( + { + title: 'title', + message: 'text', + autoCancel: true, + alignment: DialogAlignment.CenterStart, + gridCount:-1, + primaryButton: { + value: 'ok', + enabled: true, + defaultFocus: true, + style: DialogButtonStyle.HIGHLIGHT, + action: () => { + } + }, + secondaryButton: { + enabled: true, + defaultFocus: true, + style: DialogButtonStyle.HIGHLIGHT, + value: 'secondaryButton', + action: () => { + this.msg = 'secondaryButton is done'; + } + }, + } + ) + }).backgroundColor(0x317aff) + Text(this.msg) + }.width('100%').margin({ bottom: 50 }) + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0370.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0370.ets new file mode 100755 index 00000000..cac0d4c6 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0370.ets @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIComponentPopupBoxAlertDialogInterfaceReplacement0370 { + build() { + Column({ space: 2 }) { + Button('two buttons dialog') + .id('show') + .onClick(() => { + AlertDialog.show( + { + title: 'title', + message: 'text', + autoCancel: true, + alignment: DialogAlignment.CenterStart, + gridCount:-1, + primaryButton: { + value: getContext().resourceManager.getStringSync($r('app.string.primaryButton')), + enabled: true, + defaultFocus: true, + style: DialogButtonStyle.HIGHLIGHT, + action: () => { + } + }, + secondaryButton: { + enabled: true, + defaultFocus: true, + style: DialogButtonStyle.HIGHLIGHT, + value: 'cancel', + action: () => { + } + }, + } + ) + }).backgroundColor(0x317aff) + }.width('100%').margin({ bottom: 50 }) + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0390.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0390.ets new file mode 100755 index 00000000..c00267d3 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0390.ets @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIComponentPopupBoxAlertDialogInterfaceReplacement0390 { + build() { + Column({ space: 2 }) { + Button('two buttons dialog') + .id('show') + .onClick(() => { + AlertDialog.show( + { + title: 'title', + message: 'text', + autoCancel: true, + alignment: DialogAlignment.Center, + primaryButton: { + value: 'ok', + enabled: true, + defaultFocus: true, + style: DialogButtonStyle.HIGHLIGHT, + action: () => { + } + }, + secondaryButton: { + enabled: true, + defaultFocus: true, + style: DialogButtonStyle.HIGHLIGHT, + value: 'cancel', + action: () => { + } + }, + } + ) + }).backgroundColor(0x317aff) + }.width('100%').margin({ bottom: 50 }) + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0410.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0410.ets new file mode 100755 index 00000000..10ce2379 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0410.ets @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIComponentPopupBoxAlertDialogInterfaceReplacement0410 { + build() { + Column({ space: 2 }) { + Button('two buttons dialog') + .id('show') + .onClick(() => { + AlertDialog.show( + { + title: 'title', + message: 'text', + autoCancel: true, + alignment: DialogAlignment.CenterStart, + } + ) + }).backgroundColor(0x317aff) + }.width('100%').margin({ bottom: 50 }) + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0560.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0560.ets new file mode 100755 index 00000000..97bb344f --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0560.ets @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIComponentPopupBoxAlertDialogInterfaceReplacement0560 { + @State msg : string = ''; + build() { + Column({ space: 2 }) { + Button('one button dialog') + .id('show') + .onClick(() => { + AlertDialog.show( + { + title: 'title', + message: 'text', + autoCancel: true, + alignment: DialogAlignment.CenterStart, + confirm: { + value: 'confirmButton', + action: () => { + } + }, + cancel: () => { + this.msg = 'cancel is done'; + }, + } + ) + }).backgroundColor(0x317aff) + Text(this.msg) + }.width('100%').margin({ bottom: 50 }) + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0570.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0570.ets new file mode 100755 index 00000000..701ee6f9 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0570.ets @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIComponentPopupBoxAlertDialogInterfaceReplacement0570 { + @State msg : string = ''; + build() { + Column({ space: 2 }) { + Button('one button dialog') + .id('show') + .onClick(() => { + AlertDialog.show( + { + title: 'title', + message: 'text', + autoCancel: true, + alignment: DialogAlignment.CenterStart, + confirm: { + value: 'confirmButton', + action: () => { + this.msg = 'confirm is done'; + } + }, + } + ) + }).backgroundColor(0x317aff) + Text(this.msg) + }.width('100%').margin({ bottom: 50 }) + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0690.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0690.ets new file mode 100755 index 00000000..e3c0e496 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0690.ets @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIComponentPopupBoxAlertDialogInterfaceReplacement0690 { + build() { + Column({ space: 2 }) { + Button('one button dialog') + .id('show') + .onClick(() => { + AlertDialog.show( + { + title: 'title', + message: 'text', + autoCancel: true, + alignment: DialogAlignment.CenterStart, + gridCount: 100, + confirm: { + value: 'confirm', + style: DialogButtonStyle.HIGHLIGHT, + action: () => { + } + }, + } + ) + }).backgroundColor(0x317aff) + }.width('100%').margin({ bottom: 50 }) + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0780.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0780.ets new file mode 100755 index 00000000..53ab69cd --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0780.ets @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIComponentPopupBoxAlertDialogInterfaceReplacement0780 { + @State msg : string = ''; + build() { + Column({ space: 2 }) { + Button('one button dialog') + .id('show') + .onClick(() => { + AlertDialog.show( + { + title: 'title', + message: 'text', + autoCancel: true, + offset: { dx: '', dy: '' }, + alignment: DialogAlignment.CenterStart, + confirm: { + value: 'confirmButton', + action: () => { + } + }, + cancel: () => { + this.msg = 'cancel is done'; + }, + } + ) + }).backgroundColor(0x317aff) + Text(this.msg) + }.width('100%').margin({ bottom: 50 }) + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0800.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0800.ets new file mode 100755 index 00000000..73fff737 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0800.ets @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIComponentPopupBoxAlertDialogInterfaceReplacement0800 { + @State msg : string = ''; + build() { + Column({ space: 2 }) { + Button('one button dialog') + .id('show') + .onClick(() => { + AlertDialog.show( + { + title: 'title', + message: 'text', + autoCancel: true, + offset: { dx: -10, dy: -10 }, + alignment: DialogAlignment.Center, + confirm: { + value: 'confirmButton', + action: () => { + } + }, + cancel: () => { + this.msg = 'cancel is done'; + }, + } + ) + }).backgroundColor(0x317aff) + Text(this.msg) + }.width('100%').margin({ bottom: 50 }) + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement0010.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement0010.ets new file mode 100755 index 00000000..5c170ac4 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement0010.ets @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIComponentPopupBoxCalendarPickerFeatureReplacement0010 { + private selectedDate: Date = new Date('2024-12-25'); + @State changeRes: string = ''; + + build() { + Column() { + Text('日期选择器').fontSize(30) + Column() { + CalendarPicker({ hintRadius: 10, selected: this.selectedDate }) + .id('UIComponentPopupBoxCalendarPickerFeatureReplacement0010') + .edgeAlign(CalendarAlign.END) + .textStyle({ color: "#ff0000ff", font: { size: 20, weight: FontWeight.Normal } }) + .margin(10) + .onChange((value) => { + this.changeRes = JSON.stringify(value).substring(1,8); + }) + }.alignItems(HorizontalAlign.Center).width("100%").height('60%') + Text(this.changeRes).fontColor(Color.Orange).fontSize(16).margin(20) + }.width('100%').margin({ top: 20 }) + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement0020.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement0020.ets new file mode 100755 index 00000000..cd6cb382 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement0020.ets @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIComponentPopupBoxCalendarPickerFeatureReplacement0020 { + private selectedDate: Date = new Date('2024-12-01'); + + build() { + Column() { + Text('日期选择器').fontSize(30) + Column() { + CalendarPicker({ hintRadius: 10, selected: this.selectedDate }) + .id('UIComponentPopupBoxCalendarPickerFeatureReplacement0020') + .edgeAlign(CalendarAlign.END) + .textStyle({ color: "#ff0000ff", font: { size: 20, weight: FontWeight.Normal } }) + .margin(10) + .onChange((value) => { + }) + }.alignItems(HorizontalAlign.Center).width("100%").height('60%') + }.width('100%').margin({ top: 20 }) + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement0030.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement0030.ets new file mode 100755 index 00000000..22364da7 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement0030.ets @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIComponentPopupBoxCalendarPickerFeatureReplacement0030 { + private selectedDate: Date = new Date('2025-01-01'); + + build() { + Column() { + Text('日期选择器').fontSize(30) + Column() { + CalendarPicker({ hintRadius: 10, selected: this.selectedDate }) + .id('UIComponentPopupBoxCalendarPickerFeatureReplacement0030') + .edgeAlign(CalendarAlign.END) + .textStyle({ color: "#ff0000ff", font: { size: 20, weight: FontWeight.Normal } }) + .margin(10) + .onChange((value) => { + }) + }.alignItems(HorizontalAlign.Center).width("100%").height('60%') + }.width('100%').margin({ top: 20 }) + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement0040.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement0040.ets new file mode 100755 index 00000000..65dde225 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement0040.ets @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Entry +@Component +struct UIComponentPopupBoxCalendarPickerFeatureReplacement0040 { + private selectedDate: Date = new Date('2024-2-29'); + + build() { + Column() { + Text('日期选择器').fontSize(30) + Column() { + CalendarPicker({ hintRadius: 10, selected: this.selectedDate }) + .id('UIComponentPopupBoxCalendarPickerFeatureReplacement0040') + .edgeAlign(CalendarAlign.END) + .textStyle({ color: "#ff0000ff", font: { size: 20, weight: FontWeight.Normal } }) + .margin(10) + .onChange((value) => { + }) + }.alignItems(HorizontalAlign.Center).width("100%").height('60%') + }.width('100%').margin({ top: 20 }) + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0290.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0290.ets new file mode 100755 index 00000000..b1245255 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0290.ets @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { LengthMetrics, LengthUnit } from '@kit.ArkUI' + + +@Entry +@Component +struct UIComponentPopupboxMenuStyleEnhancementReplacement0290 { + @State noDiv : boolean = false; + @Builder + MyMenu() { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) + } + .width('240vp') + .height('60vp') + .menuItemDivider({ + strokeWidth: new LengthMetrics(1.5,LengthUnit.VP), + startMargin: new LengthMetrics(2,LengthUnit.VP), + endMargin: new LengthMetrics(2,LengthUnit.VP), + color: Color.Pink + }) + } + @Builder + MyMenu1() { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) + } + .width('240vp') + .height('60vp') + } + + build() { + Row() { + Column() { + Button('noDiv') + .id('noDiv') + .onClick(()=>{ + this.noDiv = true; + }) + Text('displayMenu') + .id('display') + .fontWeight(FontWeight.Bold) + } + .bindContextMenu(!this.noDiv ? this.MyMenu : this.MyMenu1(), ResponseType.LongPress) + .width('100%') + .height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0300.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0300.ets new file mode 100755 index 00000000..59f321fe --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0300.ets @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { LengthMetrics, LengthUnit } from '@kit.ArkUI' + + +@Entry +@Component +struct UIComponentPopupboxMenuStyleEnhancementReplacement0300 { + @Builder + MyMenu() { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) + } + .width('240vp') + .height('60vp') + .padding('10vp') + } + + build() { + Row() { + Column() { + Text('displayMenu') + .id('display') + .fontWeight(FontWeight.Bold) + } + .bindContextMenu(this.MyMenu, ResponseType.LongPress) + .width('100%') + .height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0310.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0310.ets new file mode 100755 index 00000000..27823c4d --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0310.ets @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { LengthMetrics, LengthUnit } from '@kit.ArkUI' + + +@Entry +@Component +struct UIComponentPopupboxMenuStyleEnhancementReplacement0310 { + @Builder + MyMenu() { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) + } + .width('240vp') + .height('60vp') + .menuItemDivider({ + strokeWidth: new LengthMetrics(1.5,LengthUnit.VP), + startMargin: new LengthMetrics(50,LengthUnit.VP), + endMargin: new LengthMetrics(50,LengthUnit.VP), + color: Color.Pink + }) + } + + build() { + Row() { + Column() { + Text('displayMenu') + .id('display') + .fontWeight(FontWeight.Bold) + } + .bindContextMenu(this.MyMenu, ResponseType.LongPress) + .width('100%') + .height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0350.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0350.ets new file mode 100755 index 00000000..216a2309 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0350.ets @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { LengthMetrics, LengthUnit } from '@kit.ArkUI' + + +@Entry +@Component +struct UIComponentPopupboxMenuStyleEnhancementReplacement0350 { + @Builder + MyMenu() { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) + } + .width('240vp') + .height('60vp') + .menuItemDivider({ + strokeWidth: new LengthMetrics(1), + startMargin: new LengthMetrics(-10), + endMargin: new LengthMetrics(-10), + color: Color.Pink + }) + } + + build() { + Row() { + Column() { + Text('displayMenu') + .id('display') + .fontWeight(FontWeight.Bold) + } + .bindContextMenu(this.MyMenu, ResponseType.LongPress) + .width('100%') + .height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0360.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0360.ets new file mode 100755 index 00000000..dd97af0e --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0360.ets @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { LengthMetrics, LengthUnit } from '@kit.ArkUI' + + +@Entry +@Component +struct UIComponentPopupboxMenuStyleEnhancementReplacement0360 { + @Builder + MyMenu() { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) + } + .width('240vp') + .height('60vp') + .menuItemDivider({ + strokeWidth: new LengthMetrics(20,LengthUnit.PERCENT), + startMargin: new LengthMetrics(120,LengthUnit.LPX), + endMargin: new LengthMetrics(120,LengthUnit.LPX), + color: getContext().resourceManager.getStringSync($r('app.string.EntryAbilityLabel')) + }) + } + + build() { + Row() { + Column() { + Text('displayMenu') + .id('display') + .fontWeight(FontWeight.Bold) + } + .bindContextMenu(this.MyMenu, ResponseType.LongPress) + .width('100%') + .height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0370.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0370.ets new file mode 100755 index 00000000..b0b5ae48 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0370.ets @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { LengthMetrics, LengthUnit } from '@kit.ArkUI' + + +@Entry +@Component +struct UIComponentPopupboxMenuStyleEnhancementReplacement0370 { + @Builder + MyMenu() { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) + } + .width('240vp') + .height('60vp') + .menuItemDivider({ + strokeWidth: new LengthMetrics(3,LengthUnit.FP), + startMargin: new LengthMetrics(60,LengthUnit.VP), + endMargin: new LengthMetrics(60,LengthUnit.VP), + color: Color.Red + }) + } + + build() { + Row() { + Column() { + Text('displayMenu') + .id('display') + .fontWeight(FontWeight.Bold) + } + .bindContextMenu(this.MyMenu, ResponseType.LongPress) + .width('100%') + .height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0380.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0380.ets new file mode 100755 index 00000000..52051e76 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0380.ets @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { LengthMetrics, LengthUnit } from '@kit.ArkUI' + + +@Entry +@Component +struct UIComponentPopupboxMenuStyleEnhancementReplacement0380 { + @Builder + MyMenu() { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) + } + .width('240vp') + .height('60vp') + .menuItemDivider({ + strokeWidth: new LengthMetrics(3,LengthUnit.LPX), + startMargin: new LengthMetrics(30,LengthUnit.PERCENT), + endMargin: new LengthMetrics(30,LengthUnit.PERCENT), + color: getContext().resourceManager.getStringSync($r('app.string.Color_green')) + }) + } + + build() { + Row() { + Column() { + Text('displayMenu') + .id('display') + .fontWeight(FontWeight.Bold) + } + .bindContextMenu(this.MyMenu, ResponseType.LongPress) + .width('100%') + .height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0390.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0390.ets new file mode 100755 index 00000000..edf11214 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0390.ets @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { LengthMetrics, LengthUnit } from '@kit.ArkUI' + + +@Entry +@Component +struct UIComponentPopupboxMenuStyleEnhancementReplacement0390 { + @Builder + MyMenu() { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) + } + .width('240vp') + .height('60vp') + .menuItemDivider({ + strokeWidth: new LengthMetrics(3,LengthUnit.LPX), + startMargin: new LengthMetrics(1.5,LengthUnit.FP), + endMargin: new LengthMetrics(1.5,LengthUnit.FP), + color: 'rgba(57, 47, 73, 0.2)' + }) + } + + build() { + Row() { + Column() { + Text('displayMenu') + .id('display') + .fontWeight(FontWeight.Bold) + } + .bindContextMenu(this.MyMenu, ResponseType.LongPress) + .width('100%') + .height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0400.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0400.ets new file mode 100755 index 00000000..e87f722a --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0400.ets @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { LengthMetrics, LengthUnit } from '@kit.ArkUI' + + +@Entry +@Component +struct UIComponentPopupboxMenuStyleEnhancementReplacement0400 { + @Builder + MyMenu() { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) + } + .width('240vp') + .height('60vp') + .menuItemDivider({ + strokeWidth: new LengthMetrics(3,LengthUnit.PX), + startMargin: new LengthMetrics(10,LengthUnit.PX), + endMargin: new LengthMetrics(10,LengthUnit.PX), + color: '0XFF3C4B34' + }) + } + + build() { + Row() { + Column() { + Text('displayMenu') + .id('display') + .fontWeight(FontWeight.Bold) + } + .bindContextMenu(this.MyMenu, ResponseType.LongPress) + .width('100%') + .height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0410.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0410.ets new file mode 100755 index 00000000..09071ccb --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0410.ets @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { LengthMetrics, LengthUnit } from '@kit.ArkUI' + + +@Entry +@Component +struct UIComponentPopupboxMenuStyleEnhancementReplacement0410 { + @Builder + MyMenu() { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) + } + .width('240vp') + .height('60vp') + .menuItemDivider({ + strokeWidth: new LengthMetrics(60), + startMargin: new LengthMetrics(1), + endMargin: new LengthMetrics(1), + color: '#392F49' + }) + } + + build() { + Row() { + Column() { + Text('displayMenu') + .id('display') + .fontWeight(FontWeight.Bold) + } + .bindContextMenu(this.MyMenu, ResponseType.LongPress) + .width('100%') + .height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0420.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0420.ets new file mode 100755 index 00000000..7af95b5c --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0420.ets @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { LengthMetrics, LengthUnit } from '@kit.ArkUI' + + +@Entry +@Component +struct UIComponentPopupboxMenuStyleEnhancementReplacement0420 { + @Builder + MyMenu() { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) + } + .width('240vp') + .height('60vp') + .menuItemDivider({ + strokeWidth: new LengthMetrics(-10) + }) + } + + build() { + Row() { + Column() { + Text('displayMenu') + .id('display') + .fontWeight(FontWeight.Bold) + } + .bindContextMenu(this.MyMenu, ResponseType.LongPress) + .width('100%') + .height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0430.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0430.ets new file mode 100755 index 00000000..fdde790a --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0430.ets @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { LengthMetrics, LengthUnit } from '@kit.ArkUI' + + +@Entry +@Component +struct UIComponentPopupboxMenuStyleEnhancementReplacement0430 { + @Builder + MyMenu() { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) + } + .width('240vp') + .height('60vp') + .menuItemDivider({ + strokeWidth: new LengthMetrics(-100000), + }) + } + + build() { + Row() { + Column() { + Text('displayMenu') + .id('display') + .fontWeight(FontWeight.Bold) + } + .bindContextMenu(this.MyMenu, ResponseType.LongPress) + .width('100%') + .height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0440.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0440.ets new file mode 100755 index 00000000..f2e6e24c --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0440.ets @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { LengthMetrics, LengthUnit } from '@kit.ArkUI' + + +@Entry +@Component +struct UIComponentPopupboxMenuStyleEnhancementReplacement0440 { + @Builder + MyMenu() { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) + } + .width('240vp') + .height('60vp') + .menuItemDivider({ + strokeWidth: undefined, + startMargin: undefined, + endMargin: undefined, + color: undefined + }) + } + + build() { + Row() { + Column() { + Text('displayMenu') + .id('display') + .fontWeight(FontWeight.Bold) + } + .bindContextMenu(this.MyMenu, ResponseType.LongPress) + .width('100%') + .height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0530.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0530.ets new file mode 100755 index 00000000..fbb297d9 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0530.ets @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +@Entry +@Component +struct UIComponentPopupboxMenuStyleEnhancementReplacement0530 { + @Builder + MyMenu() { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) + } + .width('240vp') + .height('60vp') + .padding('10vp') + } + + build() { + Row() { + Column() { + Text('displayMenu') + .id('display') + .fontWeight(FontWeight.Bold) + } + .bindMenu(this.MyMenu) + .width('100%') + .height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0610.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0610.ets new file mode 100755 index 00000000..f7259577 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0610.ets @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { LengthMetrics, LengthUnit } from '@kit.ArkUI' + + +@Entry +@Component +struct UIComponentPopupboxMenuStyleEnhancementReplacement0610 { + @Builder + MyMenu() { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) + } + .width('240vp') + .height('60vp') + .menuItemDivider({ + strokeWidth: new LengthMetrics(3,LengthUnit.LPX), + startMargin: new LengthMetrics(30,LengthUnit.PERCENT), + endMargin: new LengthMetrics(30,LengthUnit.PERCENT), + color: getContext().resourceManager.getStringSync($r('app.string.Color_green')) + }) + } + + build() { + Row() { + Column() { + Text('displayMenu') + .id('display') + .fontWeight(FontWeight.Bold) + } + .bindMenu(this.MyMenu) + .width('100%') + .height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0620.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0620.ets new file mode 100755 index 00000000..ac95a13a --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0620.ets @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { LengthMetrics, LengthUnit } from '@kit.ArkUI' + + +@Entry +@Component +struct UIComponentPopupboxMenuStyleEnhancementReplacement0620 { + @Builder + MyMenu() { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) + } + .width('240vp') + .height('60vp') + .menuItemDivider({ + strokeWidth: new LengthMetrics(3,LengthUnit.PX), + startMargin: new LengthMetrics(1.5,LengthUnit.FP), + endMargin: new LengthMetrics(1.5,LengthUnit.FP), + color: 'rgba(57, 47, 73, 0.2)' + }) + } + + build() { + Row() { + Column() { + Text('displayMenu') + .id('display') + .fontWeight(FontWeight.Bold) + } + .bindMenu(this.MyMenu) + .width('100%') + .height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0630.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0630.ets new file mode 100755 index 00000000..b7f822c7 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0630.ets @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { LengthMetrics, LengthUnit } from '@kit.ArkUI' + + +@Entry +@Component +struct UIComponentPopupboxMenuStyleEnhancementReplacement0630 { + @Builder + MyMenu() { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) + } + .width('240vp') + .height('60vp') + .menuItemDivider({ + strokeWidth: new LengthMetrics(3,LengthUnit.PX), + startMargin: new LengthMetrics(10,LengthUnit.PX), + endMargin: new LengthMetrics(10,LengthUnit.PX), + color: '0XFF3C4B34' + }) + } + + build() { + Row() { + Column() { + Text('displayMenu') + .id('display') + .fontWeight(FontWeight.Bold) + } + .bindMenu(this.MyMenu) + .width('100%') + .height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0640.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0640.ets new file mode 100755 index 00000000..76c866c1 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0640.ets @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { LengthMetrics } from '@kit.ArkUI' + + +@Entry +@Component +struct UIComponentPopupboxMenuStyleEnhancementReplacement0640 { + @Builder + MyMenu() { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) + } + .width('240vp') + .height('60vp') + .menuItemDivider({ + strokeWidth: new LengthMetrics(60), + startMargin: new LengthMetrics(1), + endMargin: new LengthMetrics(1), + color: '#392F49' + }) + } + + build() { + Row() { + Column() { + Text('displayMenu') + .id('display') + .fontWeight(FontWeight.Bold) + } + .bindMenu(this.MyMenu) + .width('100%') + .height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0650.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0650.ets new file mode 100755 index 00000000..5f086d0b --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0650.ets @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { LengthMetrics } from '@kit.ArkUI' + + +@Entry +@Component +struct UIComponentPopupboxMenuStyleEnhancementReplacement0650 { + @Builder + MyMenu() { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) + } + .width('240vp') + .height('60vp') + .menuItemDivider({ + strokeWidth: new LengthMetrics(-10) + }) + } + + build() { + Row() { + Column() { + Text('displayMenu') + .id('display') + .fontWeight(FontWeight.Bold) + } + .bindMenu(this.MyMenu) + .width('100%') + .height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0670.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0670.ets new file mode 100755 index 00000000..12845249 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0670.ets @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { LengthMetrics } from '@kit.ArkUI' + + +@Entry +@Component +struct UIComponentPopupboxMenuStyleEnhancementReplacement0670 { + @Builder + MyMenu() { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) + } + .width('240vp') + .height('60vp') + .menuItemDivider({ + strokeWidth: undefined, + startMargin: undefined, + endMargin: undefined, + color: undefined + }) + } + + build() { + Row() { + Column() { + Text('displayMenu') + .id('display') + .fontWeight(FontWeight.Bold) + } + .bindMenu(this.MyMenu) + .width('100%') + .height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0680.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0680.ets new file mode 100755 index 00000000..2b3aab48 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0680.ets @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { LengthMetrics } from '@kit.ArkUI' + + +@Entry +@Component +struct UIComponentPopupboxMenuStyleEnhancementReplacement0680 { + @Builder + MyMenu() { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) + } + .width('240vp') + .height('60vp') + .menuItemDivider({ + color:'Color.Pink' + }) + } + + build() { + Row() { + Column() { + Text('displayMenu') + .id('display') + .fontWeight(FontWeight.Bold) + } + .bindMenu(this.MyMenu) + .width('100%') + .height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement1030.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement1030.ets new file mode 100755 index 00000000..c3ef34ba --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement1030.ets @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { LengthMetrics, LengthUnit } from '@kit.ArkUI' + + +@Entry +@Component +struct UIComponentPopupboxMenuStyleEnhancementReplacement1030 { + private iconStr: ResourceStr = 'cat.jpg'; + private iconStr2: ResourceStr = 'cat.jpg'; + @Builder + SubMenu() { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + MenuItem({ content: "粘贴", labelInfo: "Ctrl+V" }) + } + } + @Builder + MyMenu() { + Menu() { + MenuItemGroup() { + MenuItem({ + startIcon: this.iconStr, + content: "菜单选项", + endIcon: this.iconStr2, + builder: ():void=>this.SubMenu() + }) + MenuItem({ + startIcon: 'cat.jpg', + content: "菜单选项", + endIcon: this.iconStr2, + builder: ():void=>this.SubMenu() + }) + } + } + .width('240vp') + .height('160vp') + .subMenuExpandingMode(SubMenuExpandingMode.EMBEDDED_EXPAND) + .menuItemDivider({ + strokeWidth: new LengthMetrics(1), + startMargin: new LengthMetrics(1), + endMargin: new LengthMetrics(1), + color: '#392F49' + }) + } + + build() { + Row() { + Column() { + Text('displayMenu') + .id('display') + .fontWeight(FontWeight.Bold) + } + .bindMenu(this.MyMenu) + .width('100%') + .height("100%") + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0570.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0570.ets new file mode 100755 index 00000000..fd73991d --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0570.ets @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +@Entry +@Component +struct UIComponentUISupportColorReplacement0570 { + @State theme: ThemeColorMode = ThemeColorMode.LIGHT; + + build() { + Column() { + WithTheme({ colorMode: this.theme }) { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + } + .width('60%') + .height('40%') + .backgroundColor($r('sys.color.background_primary')) + } + + Button('change') + .id('change') + .onClick(() => { + this.theme = ThemeColorMode.LIGHT; + }) + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0580.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0580.ets new file mode 100755 index 00000000..8debf075 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0580.ets @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +@Entry +@Component +struct UIComponentUISupportColorReplacement0580 { + @State theme: ThemeColorMode = ThemeColorMode.LIGHT; + + build() { + Column() { + WithTheme({ colorMode: this.theme }) { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + } + .width('60%') + .height('40%') + .backgroundColor($r('sys.color.background_primary')) + } + + Button('change') + .id('change') + .onClick(() => { + this.theme = ThemeColorMode.DARK; + }) + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0590.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0590.ets new file mode 100755 index 00000000..684006d3 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0590.ets @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +@Entry +@Component +struct UIComponentUISupportColorReplacement0690 { + @State theme: ThemeColorMode = ThemeColorMode.DARK; + + build() { + Column() { + WithTheme({ colorMode: this.theme }) { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + } + .width('60%') + .height('40%') + .backgroundColor($r('sys.color.background_primary')) + } + + Button('change') + .id('change') + .onClick(() => { + this.theme = ThemeColorMode.LIGHT; + }) + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0600.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0600.ets new file mode 100755 index 00000000..84a0f620 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0600.ets @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +@Entry +@Component +struct UIComponentUISupportColorReplacement0600 { + @State theme: ThemeColorMode = ThemeColorMode.DARK; + + build() { + Column() { + WithTheme({ colorMode: this.theme }) { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + } + .width('60%') + .height('40%') + .backgroundColor($r('sys.color.background_primary')) + } + + Button('change') + .id('change') + .onClick(() => { + this.theme = ThemeColorMode.DARK; + }) + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0610.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0610.ets new file mode 100755 index 00000000..5599bf88 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0610.ets @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +@Entry +@Component +struct UIComponentUISupportColorReplacement0610 { + @State theme: ThemeColorMode = ThemeColorMode.LIGHT; + + build() { + Column() { + WithTheme({ colorMode: this.theme }) { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + } + .width('60%') + .height('40%') + .backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0620.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0620.ets new file mode 100755 index 00000000..53639e72 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0620.ets @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +@Entry +@Component +struct UIComponentUISupportColorReplacement0620 { + @State theme: ThemeColorMode = ThemeColorMode.DARK; + + build() { + Column() { + WithTheme({ colorMode: this.theme }) { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + } + .width('60%') + .height('40%') + .backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0630.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0630.ets new file mode 100755 index 00000000..3c983ef4 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0630.ets @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +@Entry +@Component +struct UIComponentUISupportColorReplacement0630 { + @State theme: ThemeColorMode = ThemeColorMode.SYSTEM; + + build() { + Column() { + WithTheme({ colorMode: this.theme }) { + Menu() { + MenuItem({ content: "复制", labelInfo: "Ctrl+C" }) + } + .width('60%') + .height('40%') + .backgroundColor($r('sys.color.background_primary')) + } + }.justifyContent(FlexAlign.Center).width('100%').height("100%") + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponmentCanvasModifierReplacement/UIComponmentCanvasModifierReplacement1240.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponmentCanvasModifierReplacement/UIComponmentCanvasModifierReplacement1240.ets new file mode 100755 index 00000000..2f2a7a23 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIComponmentCanvasModifierReplacement/UIComponmentCanvasModifierReplacement1240.ets @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct UIComponmentCanvasModifierReplacement1240 { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .onReady(() => { + this.context.fillStyle = '#ffff00' + let grad = this.context.createLinearGradient(0, 0, 200, 0) + grad.addColorStop(0.0, '#ff0000') + grad.addColorStop(0.5, '#ffffff') + grad.addColorStop(1.0, '#00ff00') + this.context.fillStyle = grad + this.context.fillRect(0, 0, 200, 200) + }) + } + .width('100%') + .height('100%') + } +} + diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIPopuBoxAlertDialogCalendarPickerReplacement/UIAlertDialogInterfaceReplacement0420.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIPopuBoxAlertDialogCalendarPickerReplacement/UIAlertDialogInterfaceReplacement0420.ets new file mode 100755 index 00000000..822ac1e5 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIPopuBoxAlertDialogCalendarPickerReplacement/UIAlertDialogInterfaceReplacement0420.ets @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +@Entry +@Component +struct UIAlertDialogInterfaceReplacement0420 { + build() { + Column({ space: 5 }) { + Button('showDialog') + .id('UIAlertDialogInterfaceReplacement0420_button_01') + .onClick(() => { + // 建议使用this.getUIContext().showAlertDialog() + AlertDialog.show( + { + title: 'this is test text.this is test text.this is test text.this is test text.this is test text.this is test text.', + message: 'this is test text.', + autoCancel: true, + alignment: DialogAlignment.Center, + offset: { dx: 0, dy: -20 }, + gridCount: 3, + width: 300, + height: 200, + backgroundColor: Color.White, + textStyle: { wordBreak: WordBreak.BREAK_ALL }, + confirm: { + value: 'button', + action: () => { + console.info('Button-clicking callback') + } + }, + cancel: () => { + console.info('Closed callbacks') + }, + onWillDismiss:(dismissDialogAction: DismissDialogAction)=> { + console.info("reason=" + JSON.stringify(dismissDialogAction.reason)) + console.log("dialog onWillDismiss") + if (dismissDialogAction.reason == DismissReason.PRESS_BACK) { + dismissDialogAction.dismiss() + } + if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) { + dismissDialogAction.dismiss() + } + } + } + ) + }) + .backgroundColor(0x317aff) + }.width('100%').margin({ top: 5 }) + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIPopuBoxAlertDialogCalendarPickerReplacement/UIPopuBoxCalendarPickerFeatureReplacement0050.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIPopuBoxAlertDialogCalendarPickerReplacement/UIPopuBoxCalendarPickerFeatureReplacement0050.ets new file mode 100755 index 00000000..1fe946b2 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIPopuBoxAlertDialogCalendarPickerReplacement/UIPopuBoxCalendarPickerFeatureReplacement0050.ets @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +@Entry +@Component +struct UIPopuBoxCalendarPickerFeatureReplacement0050 { + private selectedDate: Date = new Date('2025-01-01') + + build() { + Column() { + Text('Calendar date picker').fontSize(30) + Column() { + CalendarPicker({ hintRadius: 10, selected: this.selectedDate }) + .id('UIPopuBoxCalendarPickerFeatureReplacement0050_button_01') + .edgeAlign(CalendarAlign.END) + .textStyle({ color: "#ff182431", font: { size: 20, weight: FontWeight.Normal } }) + .margin(10) + .onChange((value) => { + console.info("CalendarPicker onChange:" + JSON.stringify(value)) + }) + }.alignItems(HorizontalAlign.End).width("100%") + }.width('100%') + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIPopuBoxSupportCustomIzationStyleReplacement/UIDialogSpeciFicationsHandReplacement0060.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIPopuBoxSupportCustomIzationStyleReplacement/UIDialogSpeciFicationsHandReplacement0060.ets new file mode 100755 index 00000000..e3f57e2d --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIPopuBoxSupportCustomIzationStyleReplacement/UIDialogSpeciFicationsHandReplacement0060.ets @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +import { promptAction } from '@kit.ArkUI' + +@Entry +@Component +struct UIDialogSpeciFicationsHandReplacement0060 { + @State showButton: boolean = true; + + build() { + Column() { + Button('Show toast').fontSize(20) + .onClick(() => { + this.showButton = !this.showButton; + promptAction.showToast({ + message: 'Hello World', + duration: 5000, + alignment: Alignment.Top + }) + }).visibility(this.showButton ? Visibility.Visible : Visibility.None).id('button_01') + TextInput({ placeholder: '拉起软键盘' }).margin({ top: 80 }).id('textInput_01') + }.height('100%').width('100%').justifyContent(FlexAlign.Start) + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIPopuBoxSupportCustomIzationStyleReplacement/UIPopuBoxSupportCustomIzationStyleReplacement0830.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIPopuBoxSupportCustomIzationStyleReplacement/UIPopuBoxSupportCustomIzationStyleReplacement0830.ets new file mode 100755 index 00000000..aac6878e --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIPopuBoxSupportCustomIzationStyleReplacement/UIPopuBoxSupportCustomIzationStyleReplacement0830.ets @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +import { promptAction } from '@kit.ArkUI' + +@Entry +@Component +struct UIPopuBoxSupportCustomIzationStyleReplacement0830 { + build() { + Column() { + Button('Show toast').fontSize(20) + .onClick(() => { + promptAction.showToast({ + message: 'Hello World', + duration: 2000, + showMode: promptAction.ToastShowMode.TOP_MOST, + backgroundBlurStyle: undefined + }); + }).id('UIPopuBoxSupportCustomIzationStyle0830_button_01') + }.height('100%').width('100%').justifyContent(FlexAlign.Start) + } +} \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIRenderComComponent/UIRenderComComponent0020.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIRenderComComponent/UIRenderComComponent0020.ets new file mode 100755 index 00000000..728bdcb9 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIRenderComComponent/UIRenderComComponent0020.ets @@ -0,0 +1,241 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 创建NodeController +import webview from '@ohos.web.webview'; +import { UIContext } from '@ohos.arkui.UIContext'; +import { NodeController, BuilderNode, NodeRenderType, FrameNode } from "@ohos.arkui.node"; + +@Observed +declare class Params { + elementId: string + textOne: string + textTwo: string + width: number + height: number +} + +declare class nodeControllerParams { + surfaceId: string + type: string + renderType: NodeRenderType + embedId: string + width: number + height: number +} + +// 用于控制和反馈对应的NodeContainer上的节点的行为,需要与NodeContainer一起使用。 +class MyNodeController extends NodeController { + private rootNode: BuilderNode<[Params]> | undefined | null; + private embedId_: string = ""; + private surfaceId_: string = ""; + private renderType_: NodeRenderType = NodeRenderType.RENDER_TYPE_DISPLAY; + private width_: number = 0; + private height_: number = 0; + private type_: string = ""; + private isDestroy_: boolean = false; + + setRenderOption(params: nodeControllerParams) { + this.surfaceId_ = params.surfaceId; + this.renderType_ = params.renderType; + this.embedId_ = params.embedId; + this.width_ = params.width; + this.height_ = params.height; + this.type_ = params.type; + } + + // 必须要重写的方法,用于构建节点数、返回节点数挂载在对应NodeContainer中。 + // 在对应NodeContainer创建的时候调用、或者通过rebuild方法调用刷新。 + makeNode(uiContext: UIContext): FrameNode | null { + if (this.isDestroy_) { // rootNode为null + return null; + } + if (!this.rootNode) { // rootNode 为undefined时 + this.rootNode = new BuilderNode(uiContext, { surfaceId: this.surfaceId_, type: this.renderType_ }); + if (this.rootNode) { + this.rootNode.build(wrapBuilder(TextAreaBuilder), + { textOne: "myTextArea", width: this.width_, height: this.height_ }) + return this.rootNode.getFrameNode(); + } else { + return null; + } + } + // 返回FrameNode节点。 + return this.rootNode.getFrameNode(); + } + + setBuilderNode(rootNode: BuilderNode | null): void { + this.rootNode = rootNode; + } + + getBuilderNode(): BuilderNode<[Params]> | undefined | null { + return this.rootNode; + } + + updateNode(arg: Object): void { + this.rootNode?.update(arg); + } + + getEmbedId(): string { + return this.embedId_; + } + + setDestroy(isDestroy: boolean): void { + this.isDestroy_ = isDestroy; + if (this.isDestroy_) { + this.rootNode = null; + } + } + + postEvent(event: TouchEvent | undefined): boolean { + return this.rootNode?.postTouchEvent(event) as boolean + } +} + +@Component +struct TextAreaComponent { + @ObjectLink params: Params + @State bgColor: Color = Color.White + @State msg: string = '' + + build() { + Column() { + Text('这是Text') + .id(this.params?.elementId) + .caretColor(Color.Gray) + .fontSize(fontSize) + .fontColor(Color.Black) + } + //自定义组件中的最外层容器组件宽高应该为同层标签的宽高 + .width(this.params.width) + .height(this.params.height).visibility(visibility) + } +} + +let fontSize: number = 150; +let visibility: Visibility = Visibility.Visible; + +// @Builder中为动态组件的具体组件内容。 +@Builder +function TextAreaBuilder(params: Params) { + TextAreaComponent({ params: params }) + .width(params.width) + .height(params.height) +} + +@Entry +@Component +struct UIRenderComComponent0020 { + @State controller: webview.WebviewController = new webview.WebviewController() + private nodeControllerMap: Map = new Map(); + @State componentIdArr: Array = []; + @State posMap: Map = new Map(); + @State widthMap: Map = new Map(); + @State heightMap: Map = new Map(); + @State positionMap: Map = new Map(); + @State edges: Edges = {}; + @State widthNum: number = 0; + @State _width: number = 500; + @State _height: number = 800; + @State renderType: NodeRenderType = NodeRenderType.RENDER_TYPE_TEXTURE; + + build() { + Column({ space: 10 }) { + Row({ space: 10 }) { + Button('UPDATE').id('btn1').onClick(() => { + this._width -= 100; + fontSize -= 100; + this.controller.refresh(); + }) + Button('NodeRenderType切换').id('btn2').onClick(() => { + this.renderType = + (this.renderType == NodeRenderType.RENDER_TYPE_TEXTURE) ? NodeRenderType.RENDER_TYPE_DISPLAY : + NodeRenderType.RENDER_TYPE_TEXTURE; + this.controller.refresh(); + }) + } + + Row() { + Column() { + Stack() { + ForEach(this.componentIdArr, (componentId: string) => { + NodeContainer(this.nodeControllerMap.get(componentId)) + .position(this.positionMap.get(componentId)) + .width(this.widthMap.get(componentId)) + .height(this.heightMap.get(componentId)) + }, (embedId: string) => embedId) + // Web组件加载本地text.html页面。 + Web({ src: $rawfile("text.html"), controller: this.controller })// 配置同层渲染开关开启。 + .enableNativeEmbedMode(true)// 获取embed标签的生命周期变化数据。 + .width(this._width) + .height(this._height) + .onNativeEmbedLifecycleChange((embed) => { + console.log("NativeEmbed surfaceId" + embed.surfaceId); + // 如果使用embed.info.id作为映射nodeController的key,请在h5页面显式指定id + const componentId = embed.info?.id?.toString() as string + if (embed.status == NativeEmbedStatus.CREATE) { + console.log("NativeEmbed create" + JSON.stringify(embed.info)); + // 创建节点控制器、设置参数并rebuild + let nodeController = new MyNodeController() + // embed.info.width和embed.info.height单位是px格式,需要转换成ets侧的默认单位vp + nodeController.setRenderOption({ + surfaceId: embed.surfaceId as string, + type: embed.info?.type as string, + renderType: this.renderType, + embedId: embed.embedId as string, + width: px2vp(embed.info?.width), + height: px2vp(embed.info?.height) + }) + this.edges = + { left: `${embed.info?.position?.x as number}px`, top: `${embed.info?.position?.y as number}px` } + nodeController.setDestroy(false); + //根据web传入的embed的id属性作为key,将nodeController存入Map + this.nodeControllerMap.set(componentId, nodeController); + this.widthMap.set(componentId, px2vp(embed.info?.width)); + this.heightMap.set(componentId, px2vp(embed.info?.height)); + this.positionMap.set(componentId, this.edges); + // 将web传入的embed的id属性存入@State状态数组变量中,用于动态创建nodeContainer节点容器,需要将push动作放在set之后 + this.componentIdArr.push(componentId) + } else if (embed.status == NativeEmbedStatus.UPDATE) { + let nodeController = this.nodeControllerMap.get(componentId); + console.log("NativeEmbed update" + JSON.stringify(embed)); + this.edges = + { left: `${embed.info?.position?.x as number}px`, top: `${embed.info?.position?.y as number}px` } + this.positionMap.set(componentId, this.edges); + this.widthMap.set(componentId, px2vp(embed.info?.width)); + this.heightMap.set(componentId, px2vp(embed.info?.height)); + nodeController?.updateNode({ + textOne: 'update', + width: px2vp(embed.info?.width), + height: px2vp(embed.info?.height) + } as ESObject) + } else if (embed.status == NativeEmbedStatus.DESTROY) { + console.log("NativeEmbed destroy" + JSON.stringify(embed)); + let nodeController = this.nodeControllerMap.get(componentId); + nodeController?.setDestroy(true) + this.nodeControllerMap.clear(); + this.positionMap.delete(componentId); + this.widthMap.delete(componentId); + this.heightMap.delete(componentId); + this.componentIdArr.filter((value: string) => value != componentId) + } else { + console.log("NativeEmbed status" + embed.status); + } + }) + } + } + } + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIWebDrawPipeline/UIWebDrawPipeline0010.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIWebDrawPipeline/UIWebDrawPipeline0010.ets new file mode 100755 index 00000000..ad84c7f2 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIWebDrawPipeline/UIWebDrawPipeline0010.ets @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { webview } from '@kit.ArkWeb' + +@Entry +@Component +struct UIWebDrawPipeline0010 { + browserTabController: WebviewController = new webview.WebviewController() + @State fontSize: number = 130; + @State webAdjustSize: number = 0; + @State _width: number= 500; + @State _height: number = 600; + + build() { + Column({ space: 10 }) { + Row() { + Column() { + Stack() { + // Web组件加载本地text.html页面。 + Web({ src: $rawfile("text.html"), controller: this.browserTabController })// 配置同层渲染开关开启。 + .enableNativeEmbedMode(true)// 获取embed标签的生命周期变化数据。 + .defaultFontSize(this.fontSize) + .width('100%') + .height('100%') + } + } + } + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIWebDrawPipeline/UIWebDrawPipeline0050.ets b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIWebDrawPipeline/UIWebDrawPipeline0050.ets new file mode 100755 index 00000000..b973cc94 --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/testability/pages/UIWebDrawPipeline/UIWebDrawPipeline0050.ets @@ -0,0 +1,259 @@ +/* + * Copyright (C) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License') + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 创建NodeController +import webview from '@ohos.web.webview'; +import { UIContext } from '@ohos.arkui.UIContext'; +import { NodeController, BuilderNode, NodeRenderType, FrameNode } from "@ohos.arkui.node"; + +@Observed +declare class Params { + elementId: string + textOne: string + textTwo: string + width: number + height: number +} + +declare class nodeControllerParams { + surfaceId: string + type: string + renderType: NodeRenderType + embedId: string + width: number + height: number +} + +// 用于控制和反馈对应的NodeContainer上的节点的行为,需要与NodeContainer一起使用。 +class MyNodeController extends NodeController { + private rootNode: BuilderNode<[Params]> | undefined | null; + private embedId_: string = ""; + private surfaceId_: string = ""; + private renderType_: NodeRenderType = NodeRenderType.RENDER_TYPE_DISPLAY; + private width_: number = 0; + private height_: number = 0; + private type_: string = ""; + private isDestroy_: boolean = false; + + setRenderOption(params: nodeControllerParams) { + this.surfaceId_ = params.surfaceId; + this.renderType_ = params.renderType; + this.embedId_ = params.embedId; + this.width_ = params.width; + this.height_ = params.height; + this.type_ = params.type; + } + + // 必须要重写的方法,用于构建节点数、返回节点数挂载在对应NodeContainer中。 + // 在对应NodeContainer创建的时候调用、或者通过rebuild方法调用刷新。 + makeNode(uiContext: UIContext): FrameNode | null { + if (this.isDestroy_) { // rootNode为null + return null; + } + if (!this.rootNode) { // rootNode 为undefined时 + this.rootNode = new BuilderNode(uiContext, { surfaceId: this.surfaceId_, type: this.renderType_ }); + if (this.rootNode) { + this.rootNode.build(wrapBuilder(TextAreaBuilder), + { textOne: "myTextArea", width: this.width_, height: this.height_ }) + return this.rootNode.getFrameNode(); + } else { + return null; + } + } + // 返回FrameNode节点。 + return this.rootNode.getFrameNode(); + } + + setBuilderNode(rootNode: BuilderNode | null): void { + this.rootNode = rootNode; + } + + getBuilderNode(): BuilderNode<[Params]> | undefined | null { + return this.rootNode; + } + + updateNode(arg: Object): void { + this.rootNode?.update(arg); + } + + getEmbedId(): string { + return this.embedId_; + } + + setDestroy(isDestroy: boolean): void { + this.isDestroy_ = isDestroy; + if (this.isDestroy_) { + this.rootNode = null; + } + } + + postEvent(event: TouchEvent | undefined): boolean { + return this.rootNode?.postTouchEvent(event) as boolean + } +} + +@Component +struct TextAreaComponent { + @ObjectLink params: Params + @State bgColor: Color = Color.White + @State msg: string = '' + + build() { + Column() { + Text('这是Text') + .id(this.params?.elementId) + .caretColor(Color.Gray) + .fontSize(fontSize) + .fontColor(Color.Black) + } + //自定义组件中的最外层容器组件宽高应该为同层标签的宽高 + .width(this.params.width) + .height(this.params.height).visibility(visibility) + } +} + +let fontSize: number = 150; +let visibility: Visibility = Visibility.Visible; + +// @Builder中为动态组件的具体组件内容。 +@Builder +function TextAreaBuilder(params: Params) { + TextAreaComponent({ params: params }) + .width(params.width) + .height(params.height) +} + +@Entry +@Component +struct UIWebDrawPipeline0050 { + @State controller: webview.WebviewController = new webview.WebviewController() + private nodeControllerMap: Map = new Map(); + @State componentIdArr: Array = []; + @State posMap: Map = new Map(); + @State widthMap: Map = new Map(); + @State heightMap: Map = new Map(); + @State positionMap: Map = new Map(); + @State edges: Edges = {}; + @State widthNum: number = 0; + @State _width: number = 500; + @State _height: number = 800; + + build() { + Column({ space: 10 }) { + Row({ space: 10 }) { + Button('Text显隐切换').id('btn5').onClick(() => { + visibility = (visibility == Visibility.Visible) ? Visibility.None : Visibility.Visible; + fontSize -= 50; + this.controller.refresh(); + }) + Button('web refresh').id('btn6').onClick(() => { + this.controller.refresh(); + }) + } + + Row({ space: 10 }) { + Button('webSize -100').id('btn1').onClick(() => { + this._width -= 100; + this._height -= 100; + }) + Button('webSize +100').id('btn2').onClick(() => { + this._width += 100; + this._height += 100; + }) + } + + Row({ space: 10 }) { + Button('fontSize -100').id('btn3').onClick(() => { + fontSize -= 100; + this.controller.refresh(); + }) + Button('fontSize +100').id('btn4').onClick(() => { + fontSize += 100; + this.controller.refresh(); + }) + }.margin({ bottom: 20 }) + + Row() { + Column() { + Stack() { + ForEach(this.componentIdArr, (componentId: string) => { + NodeContainer(this.nodeControllerMap.get(componentId)) + .position(this.positionMap.get(componentId)) + .width(this.widthMap.get(componentId)) + .height(this.heightMap.get(componentId)) + }, (embedId: string) => embedId) + // Web组件加载本地text.html页面。 + Web({ src: $rawfile("text.html"), controller: this.controller })// 配置同层渲染开关开启。 + .enableNativeEmbedMode(true)// 获取embed标签的生命周期变化数据。 + .width(this._width) + .height(this._height) + .onNativeEmbedLifecycleChange((embed) => { + console.log("NativeEmbed surfaceId" + embed.surfaceId); + // 如果使用embed.info.id作为映射nodeController的key,请在h5页面显式指定id + const componentId = embed.info?.id?.toString() as string + if (embed.status == NativeEmbedStatus.CREATE) { + console.log("NativeEmbed create" + JSON.stringify(embed.info)); + // 创建节点控制器、设置参数并rebuild + let nodeController = new MyNodeController() + // embed.info.width和embed.info.height单位是px格式,需要转换成ets侧的默认单位vp + nodeController.setRenderOption({ + surfaceId: embed.surfaceId as string, + type: embed.info?.type as string, + renderType: NodeRenderType.RENDER_TYPE_TEXTURE, + embedId: embed.embedId as string, + width: px2vp(embed.info?.width), + height: px2vp(embed.info?.height) + }) + this.edges = + { left: `${embed.info?.position?.x as number}px`, top: `${embed.info?.position?.y as number}px` } + nodeController.setDestroy(false); + //根据web传入的embed的id属性作为key,将nodeController存入Map + this.nodeControllerMap.set(componentId, nodeController); + this.widthMap.set(componentId, px2vp(embed.info?.width)); + this.heightMap.set(componentId, px2vp(embed.info?.height)); + this.positionMap.set(componentId, this.edges); + // 将web传入的embed的id属性存入@State状态数组变量中,用于动态创建nodeContainer节点容器,需要将push动作放在set之后 + this.componentIdArr.push(componentId) + } else if (embed.status == NativeEmbedStatus.UPDATE) { + let nodeController = this.nodeControllerMap.get(componentId); + console.log("NativeEmbed update" + JSON.stringify(embed)); + this.edges = + { left: `${embed.info?.position?.x as number}px`, top: `${embed.info?.position?.y as number}px` } + this.positionMap.set(componentId, this.edges); + this.widthMap.set(componentId, px2vp(embed.info?.width)); + this.heightMap.set(componentId, px2vp(embed.info?.height)); + nodeController?.updateNode({ + textOne: 'update', + width: px2vp(embed.info?.width), + height: px2vp(embed.info?.height) + } as ESObject) + } else if (embed.status == NativeEmbedStatus.DESTROY) { + console.log("NativeEmbed destroy" + JSON.stringify(embed)); + let nodeController = this.nodeControllerMap.get(componentId); + nodeController?.setDestroy(true) + this.nodeControllerMap.clear(); + this.positionMap.delete(componentId); + this.widthMap.delete(componentId); + this.heightMap.delete(componentId); + this.componentIdArr.filter((value: string) => value != componentId) + } else { + console.log("NativeEmbed status" + embed.status); + } + }) + } + } + } + } + } +} diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/resources/base/profile/test_pages.json b/function/ui_compare_rh/uicompare/entry/src/ohosTest/resources/base/profile/test_pages.json index 5cc05ce9..b04dc0ce 100644 --- a/function/ui_compare_rh/uicompare/entry/src/ohosTest/resources/base/profile/test_pages.json +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/resources/base/profile/test_pages.json @@ -1801,6 +1801,173 @@ "testability/pages/UIComponentPopupBoxFullDialogInterface/UIComponentPopupBoxFullDialogInterface007", "testability/pages/UIComponentPopupBoxFullDialogInterface/UIComponentPopupBoxFullDialogInterface008", "testability/pages/UIComponentPopupBoxFullDialogInterface/UIComponentPopupBoxFullDialogInterface009", - "testability/pages/UIComponentPopupBoxFullDialogInterface/UIComponentPopupBoxFullDialogInterface0010" + "testability/pages/UIComponentPopupBoxFullDialogInterface/UIComponentPopupBoxFullDialogInterface0010", + + "testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup001", + "testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup002", + "testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup003", + "testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup004", + "testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup005", + "testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup006", + "testability/pages/UIAttributeFontInterfacePopup/UIAttributeFontInterfacePopup007", + "testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu001", + "testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu002", + "testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu003", + "testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu004", + "testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu005", + "testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu006", + "testability/pages/UIAttributeFontInterfaceMenu/UIAttributeFontInterfaceMenu007", + "testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton001", + "testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton002", + "testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton003", + "testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas001", + "testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas002", + "testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas003", + "testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas004", + "testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas005", + "testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas006", + "testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle001", + "testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle002", + "testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle003", + "testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle004", + "testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle005", + "testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog001", + "testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog002", + "testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog003", + "testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog004", + "testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog005", + "testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog006", + "testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog007", + "testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage001", + "testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage002", + "testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage003", + "testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage004", + "testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage005", + "testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage006", + "testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider001", + "testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider002", + "testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider003", + "testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider004", + "testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider005", + "testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider006", + "testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider007", + "testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText001", + "testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText002", + "testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText003", + "testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText004", + "testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText005", + "testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo001", + "testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo002", + "testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo003", + "testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo004", + "testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo005", + "testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo006", + "testability/pages/UIAttributeFontInterfaceVideo/UIAttributeFontInterfaceVideo007", + "testability/pages/UIWebDrawPipeline/UIWebDrawPipeline0010", + "testability/pages/UIWebDrawPipeline/UIWebDrawPipeline0050", + "testability/pages/UIRenderComComponent/UIRenderComComponent0020", + + "testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0530", + "testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0640", + "testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0610", + "testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0620", + "testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0650", + "testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0630", + "testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0370", + "testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0380", + "testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0360", + "testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0350", + "testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0400", + "testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0410", + "testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0390", + "testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0420", + "testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0440", + "testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0430", + "testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement1030", + "testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0290", + "testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0300", + "testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0680", + "testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0670", + "testability/pages/UIComponentPopupboxMenuStyleEnhancementReplacement/UIComponentPopupboxMenuStyleEnhancementReplacement0310", + + "testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0570", + "testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0610", + "testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0600", + "testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0630", + "testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0590", + "testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0580", + "testability/pages/UIComponentUISupportColorReplacement/UIComponentUISupportColorReplacement0620", + + "testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0320", + "testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0300", + "testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0230", + "testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0290", + "testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0270", + "testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0280", + "testability/pages/UIComponentPopupBoxActionsheetInterfaceReplacement/UIComponentPopupBoxActionsheetInterfaceReplacement0310", + + "testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0390", + "testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0690", + "testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0240", + "testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0130", + "testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0570", + "testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0560", + "testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0230", + "testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0140", + "testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0270", + "testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0780", + "testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0800", + "testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0370", + "testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0280", + "testability/pages/UIComponentPopupBoxAlertDialogInterfaceReplacement/UIComponentPopupBoxAlertDialogInterfaceReplacement0410", + + "testability/pages/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement0010", + "testability/pages/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement0020", + "testability/pages/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement0030", + "testability/pages/UIComponentPopupBoxCalendarPickerFeatureReplacement/UIComponentPopupBoxCalendarPickerFeatureReplacement0040", + + "testability/pages/SubAceStatusManagerDataDotting/SubAceStatusManagerDataDotting0010", + "testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton004", + "testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton0190", + "testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton0310", + "testability/pages/UIAttributeFontInterfaceButton/UIAttributeFontInterfaceButton0320", + "testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText0140", + "testability/pages/UIAttributeFontInterfaceText/UIAttributeFontInterfaceText0200", + "testability/pages/UIAttributeFontInterfaceCanvas/UIAttributeFontInterfaceCanvas007", + "testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle0270", + "testability/pages/UIAttributeFontInterfaceCircle/UIAttributeFontInterfaceCircle0210", + "testability/pages/UIAttributeFontInterfaceImage/UIAttributeFontInterfaceImage0220", + "testability/pages/UIAttributeFontInterfaceSlider/UIAttributeFontInterfaceSlider0180", + "testability/pages/UIAttributeFontInterfaceCustomDialog/UIAttributeFontInterfaceCustomDialog0330", + "testability/pages/UIAttributeFontInterfaceDarkMode/UIAttributeFontInterfaceDarkMode0040", + "testability/pages/UIAttributeFontInterfaceDarkMode/UIAttributeFontInterfaceDarkMode0050", + "testability/pages/UIPopuBoxSupportCustomIzationStyleReplacement/UIDialogSpeciFicationsHandReplacement0060", + "testability/pages/UIPopuBoxSupportCustomIzationStyleReplacement/UIPopuBoxSupportCustomIzationStyleReplacement0830", + "testability/pages/UIPopuBoxAlertDialogCalendarPickerReplacement/UIPopuBoxCalendarPickerFeatureReplacement0050", + "testability/pages/UIPopuBoxAlertDialogCalendarPickerReplacement/UIAlertDialogInterfaceReplacement0420", + "testability/pages/UIComponmentCanvasModifierReplacement/UIComponmentCanvasModifierReplacement1240", + "testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0010", + "testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0020", + "testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0030", + "testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0040", + "testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0050", + "testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0060", + "testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0090", + "testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0100", + "testability/pages/DFXScrollEventObserver/DFXScrollEventObserver0110", + "testability/pages/DFXDraw/DFXDraw0010", + "testability/pages/UIAnimationCustomTransitionInterface/UIAnimationCustomTransitionInterface0050", + "testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0020", + "testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0040", + "testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0060", + "testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0090", + "testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0110", + "testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0130", + "testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0170", + "testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0180", + "testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0190", + "testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0200", + "testability/pages/UIAnimationParticleOption/UIAnimationParticleOption0230", + "testability/pages/UIAnimationParticleSpin/UIAnimationParticleSpin0090" ] } -- Gitee From 42c15e99e615bc72bfde1a6713b8b8ac71d369d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AE=9D=E8=BF=AA?= Date: Sat, 28 Dec 2024 14:47:55 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E6=A1=86=E6=9E=B6DFX?= =?UTF-8?q?=E5=8A=A8=E7=94=BB=E8=B5=84=E6=BA=90=E5=90=88=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 陈宝迪 --- .../entry/src/ohosTest/ets/big_icon.png | Bin 0 -> 27877 bytes .../entry/src/ohosTest/ets/blue_icon.png | Bin 0 -> 202 bytes .../entry/src/ohosTest/ets/caiyuan.jpg | Bin 0 -> 186540 bytes .../entry/src/ohosTest/ets/closeeye.png | Bin 0 -> 45430 bytes .../entry/src/ohosTest/ets/color.json | 12 + .../uicompare/entry/src/ohosTest/ets/img.png | Bin 0 -> 5645 bytes .../uicompare/entry/src/ohosTest/ets/img2.png | Bin 0 -> 6790 bytes .../resources/base/element/string.json | 16 ++ .../ohosTest/resources/base/media/caiyuan.jpg | Bin 0 -> 186540 bytes .../ohosTest/resources/rawfile/string.json | 14 +- .../src/ohosTest/resources/rawfile/text.html | 27 ++ .../src/ohosTest/resources/rawfile/video1.ts | 237 ++++++++++++++++++ 12 files changed, 299 insertions(+), 7 deletions(-) create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/big_icon.png create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/blue_icon.png create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/caiyuan.jpg create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/closeeye.png create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/color.json create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/img.png create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/img2.png create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/resources/base/media/caiyuan.jpg create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/resources/rawfile/text.html create mode 100755 function/ui_compare_rh/uicompare/entry/src/ohosTest/resources/rawfile/video1.ts diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/big_icon.png b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/big_icon.png new file mode 100755 index 0000000000000000000000000000000000000000..7a32b59293c29076b7ff37af37dc09318aa26462 GIT binary patch literal 27877 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

^=y6%9$?R7v zAhfi5i-ba~6#e6lg0*j^jbqrj01kw7$7*m>Z*Q|IPXv;GN`bJ^lH?URI3Bp`T$7)) zo!-dND=Qg}M&>ZF@<9chAJlaAsSM>v0Of$e;|938=x8<(ZV#Ffl2zko z?mu2?MkirmkCfox_4oYhgtG3FIpfuPQ?A+Lz+#|a94V(LUQ1B8ua+fT?I0X8AAXfx z#4Mxtjk_5vM|zCN8F_4HJYuS|9zj2?bixdak`&sxR#T3mm|xSSGbgE|JOi5A-N_u! zfsQaKySKIp!0$~GGPdBycdzuMI0WMurjQbkZj{~GKh~oS+MIbA=xDGKf=4^4UR~eg z-k}-JGfH!gXs{9oQZPq7GHEhFdEG z0t1S6X}F`BU^pH+)RBd9LpD7PLz9eWig@IE(ga#)%AJ`~0mVK@KF;eNcRK-$ae{h} zdXCvjOrh5d!+^`44@$7xWQlPn%!ltB;Qb9`+f5?URsetnW;>JkdmM_D_JkyloZ}>t za0uy9B#dJ)vVc_W!RP+~)kCs?rzDftkMo+FHpkGKF&tndV3X>n1p4-<5+!LIy5UF6 zK>q+5e&h@S{J}a8dULdGZgz&)TdsJ{e_EYa%r_{@6CvM>gURC^MsZL%1m}QHI2B^# zl8e2GY~*`?_3Eo*o;elK4Txgr2yxfH6%jnrvE%yF39CXLmrNjtV?3Vbq6Y$$ zAI^af=x{lwh6j#M%7q?O5EQ z*`*s#S_DjKL`-@Lmn1Zpn+Ib}Dm#jqV;BRF-n51{QOMm;sw zrP@1lNsnrGLKg$q^rZkCoPqT;-;>^qE_fz@975wcrhLDRF40I=-kJe;q~q3&rju#( z6vQ8ir3CuZc^&gh&!M0PZa%cTiT)~P3G8WhpF=3^#E}NuD*For48Isunfo~j{cOn?N2PPfa(vuG{#3L*&c`d zY1{_mJ@}->2ZM$fZ+bd<(*bCtqn}Dc4ASS;lQePKfEVdTX{R2PWO~p7gFh+*nWsYxMOOUC$qa7$zcBL~#6>^pVGt!K@Bj)>5-UxH*JDHbTF4Z0rcS5>d5H7i z*KUS~lS`j!8IG?bjxz zM2au~!n1O&Hw^LV_uupanv8t@@q0Dcy*8(B_GeVnAxW9rEN77YoPP?Ca0_sI{vD}@ zRFC(s{h10Ys48Ap*%<@wuXbX2^dFuoh6^ZY!veo|8&hdLhBybOOyk!y#le|!R2K(0 zC#HEMw;*S^>(dl+CI0{p!<81>RAq>RWoLz7ENG7y+{Ay2 zh)pGO3AP28~oKd4e77wDkn9$`5vI z=O0{B5y-4U1p~{-+M+YJ*^er`cBiy^~Gn~-y8i_C}A>4_#v(wjH-^v2M9i%v^J3nCEM*q)-AK%O$e2N0zy@sfsMfz z zy~QcVxTN;VpQxY%nojf;$MBEO6l2-HI$#<0rR&y{Kkt52p#K29`A`CMJYtt46r-O~ zJ?RJo(t%i9f00Ma=|CAc9Zzb~wzOE4Wt%&)eoPKNxvc6bMcmDjbCKJCJx6-B(?&ONOvgR&+(Dd)Mt-c-`2yOlBn5s}wDs(qVk(H;AmdAE<| ziWD4RoN|9Z@@g2Zt>Ts5CEUaw4=Oq9?fxH)W__Xm0KDCLf@n*LGk{M$XjEplVa$o= zw~|;1!tR6x1S$Esf4nI-M!gh>9$D&#klWb{4EQ9&2+{04xQ=Canzo^ zv^sNY&5xOOHRW{J03@$$RVM`HhCe={t9itX6V{_=ke*4v^rs3<3CiS>yoyv~I6MXD zDJ8fv$MX}{oOeF;2$7WMcR1?`JqZtQ5@?)X*sLZ95XSW#qDNLqJs(=aVK88OCvs{=GEFOKv=#`KKG9GP|Q7UBmBl)|vR!vN>=8=s5sVs0(KqI9t(g8o#nn@(&^rtG4Gm(k_MJF{XMqhw4Lf{Mp8179tIa~!e_8sXr z*h7NhfaBh!BVZjcd-pWR*gL9_7bgVzRz#u#*;5JVn_a9&7RWE$Un_veE!mjQI`TmuZ zD!DrYRv?Z+2w*<*bz(Yo;8P@@DnTddQAmsl1d>Nwb5+UhT?z@iisRY&u(wQD5{}|Iq&OF-dm~X){~=P_JpS1ChKdD zrbRT`Lylr$_?ks_UX4<%%i|nklZ{2Q8gYA~AF@DyzCRibghYI@u=?QCrr;6E3Tcr~ z@Zyqndxy9{+I)lVN`!lYDl=nr3Bg13YO*CgnB&mWmtr^~tDdSCEjCp9E#3$nJK={l z1H~$G=*#sLajqLYllap`+m42`jOuknH4fz*nl~Qxb)}9`he4lEIj9*T1e~)E%C(J4 z?yO6XW<$H*6uI?dk7Gjw?YL72Bc*7yB#<|`r*Aa|ThfisPQh|wRP|bK%i5Y9yX~WK zJ%)a?0K8F=??^))!}Fxt-OB!S2zKwSF8q2^2*+3ag&B|BpL0MD-OpN5>DhVu)J2C) zf{-!o$LUC9o0xP2(up7YtbYoR%wgQp`K)*>aZgba{N(3rXX#2L1mT7aMZ6xPH6qG$ zoYK@}nIf9Xt<-bsDckq_#C|j!9*3VpNJM5M)fhLi;-es|VSxwG)W-vZ!KDmH!TFca z)4Kv3^GZ7LN>NWwl=^n2kXM7n7Xjzy7-5l7G-Y{0S$#Xxv+gOw+Md8d8#$%vPh?j) z=-#5DIa7xG>E7TwKBAEG#U_6$UcS@-bJ)^ybLrlRGaBWA9WXK1Cj%diLw|CX*3XF- z&FHbCZr*$L#s{yjLEfdyv8*XMYV<^oR4!vaXU(**Qb6N8U}e2H{OSoMCS2qwD~;{) zvX6Xp80W5i>a3(P z=+lfeLI_jOSypEawU93D#11(>QU3ty6!7gE0vlr<09F|zu;coEKC~frD+?(RfJ*|0 zJ?fGZmtk1tRZbgjc9kqi$2l1wemKd+ zDLzEoquONJSQ!}b2IWjKv7#xkl8PeMukY0DgI8iRlshsNEb z)MR6E&UiT-dJbv32@K4##!&gP7aLz-6sn~OQRS+}#YC&}#*OKm?an{DlbR0b$_XL?B+HSpn78|3bCc7J*dE@EG8h85 zLUD%qGCC9KmE`>pQif>SNH*n&1gm5c0PC?iQjo^c8!$|@%4-)LQ#=*;bfh>_3%y9d8`{N_#8(4)Tac=GpT z58@G?pmX!N>Cg&VhcZHb=%a};vSTWZ5N|cRY+U@usmb|PrW3rgy~D;8N69OBz47;6 zP%^}y`DY$G0%`#O^1jz_`x0N>$#C)S=Okf?Jx>Rk>im@}f;w|p%1-t}x=&q99RX&$ zwUS%a+{N&$M^Rf4+1uJ75JHiUMNl(SAR82~LOWAro;a`_fcl!0iE_If;1w9EcUp88 zakO(Te1p;hHmHUO(CiGFsyZjd?0K#f7M9bf52P%8rY6xl$9A* z9Z|*@ejnGRVJC-j*_M7gg<9FRgj+(8sbZ=yHyqaRQbrYA9@~~iMJ`P+8g^?#0L>g4 zT1-#^8cI`1&!sRB`-*ADu0FKvfk;U8rXe|`Kj$>OdQx%f)Bv1%55kl4rTj?!DvEA2!s*yy9BYr&`NfJVrIR^{{0 zL!5EQ=~z{-8f#Lc7b1?I0(s_1NnM0-{c7`MCNY3d-+U6eJ;CfM%NSvdsXIcR0OOxt z`Ro38sw|Pn9fLCiz|V1>wZ!WCNpmw*9#vuq9U_sCMw2cxgZ1h3s?y6QF)E*5OqzV< z6mCSo2ju~|>-p75-J~FaxrTBv(z;-;sV$Nlwh;)?im&8qHJ50{aDBP_Dzi51(gq=N zfBkj3g0UAY`GfoUJu!-4a>N17YPoVo2jxq=rb{yC;@AdqQ={{RY1=e<%w zCi4l-dF@D8<2^b2>6sYoP3zFnU>(2msTHs)9DCE37$%JbOdBL~&w32J3}cFjWb`}= zT!1(o`8lOwkH}-5^%-I~!N=B=HyAx?R)SFq%v0oI26Od4(v242M5`pOs*28g05ee& z>sq!kB5i*$UEev31H5<0Jvw{UTgdiY25p-gkQP94KM!C3097SB$)Vdzlu5zpD5)k1 z<`Wnp4Bnk7X$1iObnGHUI3V;i6O+#;)YCzyZ6}Z^3g^0LP z!=XJh>G=EBQFmIJTTofuWgc@Jo}qZa&rH;92=f^LDiTQwfCM=EqbGN_HFmPP7UINJTofcebC7UXijsHUxUJ#>HG=f;lb(fq;(yu-l9rbjNy*V-reRH7XCM zO#4-t-^?f^jmgI+y8i&5#;LGggyi=ksvX#v(ndNCdzyvUE4cMO^ywP|9QspFJ?mAW z0+!?Orj{c;IrgOkp1++T#~3-LF)~-2bJ~-V2|sjD!_tG(1pO(28)W4F0FhCem4P4Q zO(L2R8R!K`843v}6wFbMGfYIA@(w#tvJf#*uUvZ7m~7{oXwaiZACS&42&rvFU4X_okAski?!c3FDt%r7+8Z zfa+OBI2``~^@Uo7gxsd`62!9-$E`$4zxdR*GkL5Sf?L%3cBmUHZ~@P3S7bI2r918z z_okTsQ-Xe&rw~x!jAOkwKEE*ctGf{o<3&ut3HeiK`t_opKai|?m)nel@3w+do-(1c z`eveOtlf$J$U+}J^8BN*lguQE~9ZfR$r8n>+e=qR+(3pYy;FE{=Ff;Li?nS zE$lE$E?AH0PBX+)_+R62m$8?`ze76XOT4!PybrV-ZeB;}RJL=?bgQY)lEO>_`eW1l z_oub&GnO-1!zOzCoR8~U!!fNN;zs_4a>LS>!7F;4ua`%bN7B03lr zAeyc;{VG6K8<|y?f?sJLUe%(_sou^le2I7&+eVqqg(8$G&2Gt}NJ%hF46B?EpK1K7 zHsaE2b}KAwhun3p%2>)Zbc~EDP^k}z6}^e0VeL*SkN*HwE)8_wv53H<(w+yUE)RZa z#TNm?96&BOx~X7BGmIWH^!2QC?%BzluZ+gY~- zJqq*{Nz_{l-DQ#p$Rh@tN3A(-;g}DQfzvCT4u2YPjPh5N9sR3l%{}xY#0&_g{yC|L z_NdC@wM;`Or8J#sfVuXiz^2eRpasPt7^eg4OTnZBTv5lRIDzR&flLJY8eE)XG*VCk zV9~VGsd%6UVA6w5qmN211C+2%zb2-?FUmuj9vW7yPdf-q^| z4DtC?w7LMhSb87Ef*ZQzQ&^s=exuTvy!z3r0nCJQ0s0zl>{9uS>r3X7_kcfIH2@9k zN~SShySj0Y6+GDsdt2$fY7TIU@~D z>}j0M&Z#twf}y0!ZgxfAl>tF4Nhg8RflO^tW0FrM7*sm##uS9)5Lc6){d3m08%m4F zo-wt *a|-6V1P;-a_k>m&e{S71JD3c_`H7O3l|?`+I(?Ri4B*kJPu77vV`Ko~jT z^v^lLClsx$F=;Ubep`$x86OBZ>4G!Uzp1SWG@Y&YX@^TA_{9 zN7h$iaz5o~_3N10Fd&1-i~$q{o6C&koxyY0o~Ja`)~-<)n4pq#{{Sx%vpj>>2X+Uh zahk9+;z{{w$4%OV?WgsG`U{n=r7^6|fdWBj3MRzH@wbc?;lAC8WdlCHZ4EACVp z&H76usTH!bsX#(6?$q{A?s3P<&%H7&TK*{ZD%+o!$&&gD;KF4E%fviO0D_|-eeD~+<9uUi+!pBkPa_5 z*6W4ZqBwX?xn&snN$z_4({&pm3>+>6L803Dw-Tm5hd-@fI_2gkTiBFe-58Y|i2}C& z0G(O6?$|tM-x>F%Yv}NEfoJ9PJ$RTy?I8!&a;Pk(n2BNg;M8oSfAMu-L3sdi4jP{{TLIe1wKO9nW<{R5Xa@`_><%tymIU!dWso3_a!ox~tV8Y1*j zfn3LnhVf={K~nf2v1OZ7*VMobg5v9CtR037DL z>rDRukbpnzpXMvSE&?gf81<@}_k#ZFBr*aHM;?_{;j*MqSaJ!f?&J< z^cbgw0CUNtT#V~?~GCgClv5O9R9RyAwc)1qBAQHq=gw`2TFCkCV7(`fG-nIJ&%P^52vO6T zP)A&GOede`M|ySv<$?OrXOrtq?VM0L&>`8SKBAkNT=t{_=bCV1Or`cT0Q~f)6SxXs z9je{3K`c!ZaWOekTN&e^>^`QZPRip-;b{_p)5^I}cB;1l$;dx9Y;~)bETzIBG7NB| zj0|G~J@}_aBZPS?Zox@xhxv&hcI+|hfyF~JPdp^;BoE?a?c30PpVJHTO6Hcbuz@3n zZN@#VA0Zuq$Mi zKDDe;TDD6ZlS2*}A>P3ClMD#-#ww{f>BrKFIIR>?cOkJ4JmZ>eJB<5M5D!kZLK3VA z_U#dkyLlg9TCYz|hul(WJ;sSg&4b23~2af^q=jlg)1+Fz9!ND^vaCm^6g-9T zfN(hCtC0oC7i5G7ZN8WtIp&)rW;|h)$7~*yM+}mWl};*kv9 zC}O8L&ry-zJ-?-5#Ut!rCfN*;^Smi1>(;hx*m(+wq`Q(>^2B{})6^jhK-#Mdl^ufp0w6(Sn(g8g` zS}CLq^)yohZFNW6jQ8oET2V8|L5*-nB#Ne%+2joV6(|KhP@@2J+g?SWz7v0W?p}&p z)WMI<%Ab^gaw>1P-vZfb27d6ze|pYa*%W=_ia)d@1MeL6spM_z6jw4!b7^&}wHsV3 z4*5>MT9j*d3^uma?~uI@(y&GQ5Af|zOT1;Wx%XVuygVN9E85GWI!LbWFG)pKa!29C zOkt5wyYA_<0J!?sGajWZXXKHT=dr~~HA!3VNax=bgs_vpyRo9It*++$P9cyx%-I8u zPXp7BYS)icMTCZtOniKj9mT%`#c{vd((T$YpYLOwP?w@v2b#@}{C`@)t^=Q08bcQ2 zqB{1x(I;=-+eW7yRZ8>tRc3t}Vo@My%MX=-InUy8Sn$tl8Qmb?$QyD-D?v4@G?9Fp zXwQT!w3T0S4|_6@lCc^d6Z0b)<3C;iW}!JUuCV4#qI@o2W7V zwDA%!$lbRb5;0pXX=R7k{ncyfm zjJ8Ki^r+q39JtSN2>$>))|{F(#@va}lj^w7=~SiDF5$-Lcdj}i$Q86PlxMVvl?svF z8Lcs10c0nk>7Q?E&A7NFNmj(0x&zv@CsOJ`k-mUnX0oTt62zODP;}+w`g8xMH|f%X*LSsFW`5G|j`k;>VU(X*_kPHxLNV9+e%d#j{~ut?CaI zJ4eP;-rknFmo!$7*0MY1yVyVD_M7yc$BM zw=~dAC~s;&Arzd`@(nccK!*Mlzl|BBrZIV?4NdDu(tsVs7^Kc94L}DXoEYO2-SoU4 ztpH5BWXop`O(P&Zuxc(wDeEUEcRA}*X0`#18xL_!slm@f%^?B0ihRPc4LC6w^rbQX z0CfIzZ8^p{qUZ!F4^9m<g?j{MZIBN-R>d&l=m=QS>AD}}D?S5kdy&7&VR zxyQ@m0nBjp=$&t9E9Pc%atMqjm^2gkr39NxPI@)NMR=sNT$o&KI0?twums9q9(v$Q?&ou2fGmGS<(b+k^C? zYhT<9Dz0PE4pmq58eYzw%W@r1GixnlzehuC*M=k%*7X}_FS zg1{5rq*%v70Hw;<`Hov(v~vpiXju9Inv26)UBnks%{(lMQ)u1Bd9J+0jB$}m<$^dE z6-(jeCi;}cs^Pv`U$X$9Vy+eAflXjB#V%AAGOr<2g|I+A_0AlBZt0~@Nz;&e@++sg zCnwiDS2ZAH*X&f|aGi1ouIi|*OJ5Dnv6zPA)_~bG!hU1VdO-MYm1bcf85Pg?oaQ@j z$1VLUZb_GL0JMyH8|&XEX;51yoOJ`%qPdn>*s8`^$6Rs;w-uV=c^RGK z%QsWE6s%HLF0QDdNA6_X(IG|;qRvIgOfhX?hj#jNr|(xgmLbC&7QWcBOCFKG*2;bug> zwD593q8M6c#zKr|CpBip2)l{4ZyD{5KLbuvNj587(pU=H51upyaG){kw z2OW6&&>$Ussoklx9OvGFia%OW_h|tr6LxYkpd^4gh2Z@UJq0MlZI$li^Ca_(W9L6MPCI%GRKn^}ADoWJ%6|KtgX}x; zP{`4{qN{mh)SiR?0M|{Nz_~E)80pXJTUj)b9%ORFn@dLDgE%Dn)qMVRHadfm>rKx- z)wFa*Y*Fb;$7*Rj`&9O}7k8QaJPzxe7seDHLQevQ($$5CaaxAo?N+wYsM^UH!kfMaUz4yP6tlkTH~pRP1-t| z#+&M7MWw=SF`1hq48Xn=>spg?Fo=$6M#iBr1qycWchPQAeKO+p#hsoSjkLO9rcLE}F%`g(g@%MYw(nMkzERF0KR3m{@nri3=79x{008Ip7;PF5WZibtl zSoPpz>q<$e!2>5e_7zA8M*|tn6wq@{%_{)7r0GU;MFRpUV_>qYGOGZ24V-?4icE?g zs=_q|%o37_gQv=*Z42D=&K;1h=|W#hLb+DtVdyrZEAp0eJG~UNJg*PTmlFb zqUDcP%~#$JYD_6P1pO<^RHNA6ot8|b@yFv)@J}L`F^;_bX;kn&VTx)hI|;jw3cp%i zs(I)r&m*87)h2QV)f{)JaC@G8QzYQ+4&dv~r{lpwT;v?@vJ&bc)MyK1mu(6XHV6svx*{J&`OpQ?!y z1M{vp+`L3GNLfMSwOCDYgkdH{aG-&aoMyQtm#3;XjxDVj*EFejANozacM&*0GZ< zwPBG6F#D^!Zhso-u}@Q7r8pxQ6%0~rZ1bFRish|*U}e6B z)$CbJvMO%#au+8V>0Kc`aC!c9cDCd@mfmGjFmsFePI?@B(gI4KUur;T z8I^E4gV!CYJk{go!KyolJn@Qem^03D4>ZMM9~5Bdjz|3UjFJBU0~I_in3EoW@${_S zd5O{G2eZfj0HLiuJE;YbWKGN?`E$ljIH%BdHB|G>85yjr8_SER47U(@4ZMJuJuo@v z-!*W}$Gt0qi%!L%A?Q0&2@Zd)R#|iSQhE6V?IV&feza&SGTC#F#*mz$BcSh4B&4q$ z1u(w^bB|2Z0<_YY*gj9nbHT^!+PTSb{{RUUpd0}r;Ac4J*1ASr+5T0{O~;8XvH-)c z0-RQ*-Ey5PKg>Wh$z>6tXFE`JB;u)E&gqjG8STeP=Us10ozm}b@36@~ojcf3jm@dG zI8dCqZg4i$E1gKrs*0_&bivJMtQUAA%oxT#=%@Xb^??RLLH_^>IgL~xJz2+C`BHg4 zwB~8b>0#jq5ApGwt> zLXIGkT;H%8fZ+%my8z9`PtveL>Z-w!+%WDqrOvXzmzq*`?FVuDxW+SA8O1G3jP(r=?J~@?Jj^Z@~f}4sHo(}ACIOs^}QpJB1jNrm!`L^)k zN7InU^{M25y`;$D(pvIg-Lz;>7B7>9AY=@W;wORcT5#On#b%Mo7`SC0>r4E_duNPi zwd5~k6rd*tTe(?MbE1q~X z+T|0erIEbTlG!A&&n1Z`^R0VpdwWQ?x{tIdIU$2DUI@YG>Nu`$#`fCcR9m@xfsdJp zEV&)H8Lq0*3uz%&g}m5g!f#KwgCiiY{#eN(mM)@#QPj$uTX!qmwpE!=89CkaHY*-X zob(_X+>!`n+^s2I>Yx%&;Zh2JJe3azlK02sDU1ZR#r_N9fZ3l%uBgURGVp_Com z;9wkg{{ZV}rYkjvt!~X|P=WUO8DDF6GBY2d_P=x}1|U zl4Wjb06&FWipJtnfny*!z-IYJ=6I^?FxWjuYSWo?BE)14)ToavixgXn-p11PmN{6W^YF%|_R(WGn)! z5~Z>;oE|rRpW#re&-q8o9_AV{EOKs5#fB8;?wo_4>G;!fdk!jlfac-aMl4Cr;&Z#+ ztl3*zOB>5_T|yp8xat1xGI_^wTe+ymnUlM*K_h4Sdeh8m4h3n;Z3;jl3yX~BaXUfh z1bTix)t*5I2ajqYQBPpChT@e+YB5Dv5+XZ;wRaBwm1-#=gvx_=ZN*7HP%4@`A^BL3 zZq%!mbsO={NhkHFalYjzV?sv@9|W`Hl*sIP&N0@J?vaM)JD7}|{{RWkYKZ^>MJ&g0 z=N^D{KU%7oX#mbgUPoVQg%r!XFT3ti6-g{|7pXqK%B!@Sf~p0`&T?^|@TBups z89jf%b*k*lWG5#-PPI{pn;a!EmMVJuqz1jD#vmStQYf{@mxRaUPU|&Kq-fRx+(Ad<7^jqQR$FT41aKSN`;)em@SMrCe*7Bw_Ps zj&gH~&oW5LFfcmxraKZoW+3`vvE*`o^DCO$7hYA$<+2Y^Rp*-^{KMCS?@$D0ZWNQ> z+NTk(kh?HncRk4W#WxiYyJSqW0 z`J^5I{6#bX4tw^YS94*G2dyNMLnlDaH}D6kIH~T|CY(L8Y(`ZkFiUJ~axzCFJda{3 zpdfwI`O%!wZEgddvA`!C=@qg)ed&iZd9@cYLQOYUZod(A_*J(SQm!QI3B)nWo~>15GA%nEmab?m_oY)QW=kS7!>! zG4;r(j6HG_mzigo1O&Z^qr zZw(W(9)l+s_xG)}Rdf$4M<62{$C5^UPq?l&)%HjM3II9lpUSmb@&^MGxNLK~`JeJ@ z%Ee*rKXmS)Rr20O=k728v4!$-2tWY*>E_!{k;ss=T#Nl z{4(-4?yh0v0tY<%^s0_&hU+1HQm;gFP4uR5TDMv)-Lnw!<$F4E4QD(|gn~J)>Q$-K zSA)5P;V3&vSda0epTd`KwI(Z4Lnf3OOjFSr$qF(+&NIpSP}m8YQ(6|0c?Frl!vF!t zW7n-lB1ohloyU*~70>O{Z6f`fvSlu4!N54;t&~Pm0`wdlbo$fM-Cj8Nbt8-(y!-T~ z>m-D!wosz1O>RyI64OID^{2*$MhXc0O#w6ac{OQcU8}WN zbA|+r=eN`U0IgF}rz#v{amc<_HaVes)uejE+3%p zP&b+spk2$<<3Gx{S*Q*W*&UiHVBhFa33&3oizfXE*uZOfyzuz1;(ALXyXJeL(ZPsjw{{Wup)BWLI zgPf1+ToR!goteizdUX2NWju^x1z4!hIP3m;)z6_8yDYQqM&NsKROi2r*3wIfvWT9X zmOX&=C;AiGq>fw=OYX`*gmKM+s04(GVgzyLT{OVG>uxwC&6lxDP=wpI7 z^THJ^`JeE`Z0UO9-{vV}5nKU~0XtlG#(5piIj&AI?ZsJ&Mz@tFU%eR&KMLAZm9#Nc zUF`Nct!0VQX8!jAK3PE8Se% zmd?hQJW-m)d2UE0q-E!zHKlH3Xz>34cz5-vE>O2p9ZOOgaw`}No3qh?#Z=RLLYkD% z2)AUBS8*k?oS^sJu_0J^;0d4;-q?poDFI9$&9*zBQ`G43Pqqj=p_ zmCiCZd*`U8nTFQnaCqjWJpsb(uwMY-Mk|=PC;k#hdgLGJTfz6HMoxc9=dMWq0EB`f zJwK&s9m#6Oq^=py9Xix5tGF6-Fb5;4>qrP@1Dtw_mafK~ktA`0+N>-i+MtLKNEz$M z#ZH;zAHCY2vm>05VqQim>k|6`?@_5BbIHv~yRHTR>&+aY%*7#B(u}Acw8JKHIK?rG z6W6^Qq0B_nT3ol5lf=@iXJ+A?k8bqmg-9%T2d6!1yjp#<7cX%XAWPJdo-@~u)cK`h z8!#U-qZK0uourKCuQbxI?{YSYQ?_%~p}1v=CFlzR0QRVK%gc+)cX``;E0MbcCxOQl z`?5DK?ngX&bgM|2Xh$8RPBN|X>^)nYcPG-Oh6`wdoriunDtez&`HFM|suo4bP*8vg z&*ACc@TWs%_L$_I=UA;_Et2EsCvHH;QZs?=no?Z$#xIB%`z|KCHsl3Uz zq=;k?#>Ei^GBOT0@7JwTCOf7n1SIVWLPVw6@%OR#B@`zKg5E*^O4tI%kaeL4q`rM?WwGd1vPT01C!X2HxhB^CRPF9QUlPOHaAEni(MnDV@bn zKG>ual#G1Ev(8U7WL&h74ae?|ihl3^0A8s%M2=#Faq5CZQbfB)D!^wR=l=k&T_%%l z40BwQeu3T~!X#o4s63ONogbD~A<|yj*T=2)6bTWmS$h5*bm>+^FZLU;hAIN|!N2rZpv1 zk&}VbKEA)_@kyl9#m>ulqF}9-+=K&z!3RGvIK~bJD%(w^vM@wdpMFEBBcFaq$6h%4 z^I1`@ppt3oHy3>wLRjaM=88Eahd4he+q)jzcO3E7sZSF;n7CscnA{5?`M$hoImg#E zsA6dwVYmSmxY}DJ{W@Zvv7*NDnU4>VfO+8K>DQmayH+A7jz+>HgX}7x#-}H0#;ng8 z=jS;s@`31iCnJoSsi<4YaU5(Wl5Z$6R%FQwoB&T@jB(iJu9vW57O<1nhrQwOL3x)(a%W}$3r%-Sft_AZ{E39e? zfK)CrNa>vXsycz{Dy_+sLMFoGj)k+vc<21%nu<%^yOm3DoM(~&9sd9f{&keOs%kZ8 zlxK+jsK&8?+qQ&KcL-p!+y_QdP60g+uQj0(ym32h$`uWQd*iPjnWT=@u54Ym zv&g6lFCQ*Hr(eX6$D`Zw@3D`wzQ$aMmH~!HJdkSj+>yvtq*EDG$Ci-*Gx#4$tt1j! z&Lf=~IRFd+T-8Y=V&w17xbIyyQ?pFZYoX>s2&Du$8~XO-4E{9+PkIMl4n=9oA??99 z7#ZMh&M8Jt036aBwp;V3LfcrMYOa7UmivN{$?44wn*-wtRu(V}hw(krsb`nXLx%a3?id7;M?bGhWx-KtDamIjc?XZyr=Cr#vaE*bj$*Jy zMfr&(h#gLNt0qP&OXmZ%Lt+BjL>M2tk^$q^tt(}R%b%#IoA;R3#AO|c03XEFRkllg zK}?-Cw1^9IIUBhALHt^;?;vd$QR(Ycrfg~uZ6g?EC)ncy^8$!A+d$DNb!K9yWI5!H zf}<-gNjP7^ttTzY?H!5j_*5=Plh25yr!>&BuCWw3~}2 z{iE1sogx?i09aJuZ~^J#OPMbvG<+FJmH`=FdvMv#%QoNYYw znwH_WgY)o4PDfwLnJX8FE&`I0e)H-&f%K-J zO_^?UzyQ(&LJkKXTD=JrVVDg3r2ha9CYnwO8KHm!fIy~`RD=ZNbf)JVH(thy2nT~y zAq^!V+@xcbry5`;DRYWSS_Txj7#_ZqoP8*u2M#`z>S*GCXaQ*{bDBy3DG%#PX{LY! zMt>?PDU5i+s6FY*_{+B>`twaKo=!fs8FTH5i(FS6%*}(;bR1MIkb8aVy5k>T)l<}{Y@!| zc47F_wvmya%8<4OF;AWJVPU0l+w!A!+E5gOlZrzgKaQ)JJ;h<-egMx(a?TF~3VR*KA#e9Uy>lX;_Pr-UDcJrIWOBvXey1xO+QvVUaDD0>L{f_z&lwdul`Hd98&7Y@8b>ZU-T72MdqJ%Ud;R^inPp9<2d5*oLL?)u zGxetnf}@H#82O3gd_T-iGm}@7?4^cX!R~hS6_xgoPt2n@>zZcr$AU#?Do$QQQ%lU~ zBe#Hz$2#sk0T`t>Mh4o^sXt7Quf22I-#OjQPaM(`GIA>!VP)0a(N$d)jrG-lR?IQu zCnp{18Fh&_sfDra?fok_ODG>9;B^NaQhD3R-nliLFwj!Hi~x=QTUGFO>qh!7f3-I zCTSkt((G-yNY+isokl>;4d{Hv8tV|e`TyxVT{uL_gQnX++d0g-TIQOfS zJaW}f@)E0s*~I8(@T91N$dw%TEODNFDWBNaHj(9`c``;-Mtk(*rxga5t6j+}WnX7< zicTv>`&xA$c;ugy9>%$)iN-z+3Fw}U@^(sMD_O_{{YWQ(uOXiAMYclkrgOHOWk^yney@h z46Haf9Px@%CzgqmjjPBauN@+PFk#SualKABAmy?7aZOzs;3y!Wa&SpMm3IAVmsuR% z%4=j)Z=U8kGmJhmr#|$N!m^SafK^ntJ$*%4eJ1rA0t2)k;pdEVNG$F_kQij%K5m3n zD)6_vB3(IkLq5umBiIHMVB@_hk8eOS22MRaDtPT>jAWgy+avSFdkpoZk(8@~5uET# zH&52Gb?>5gEmP}bHRJ=2mw~tvI`*gU z9Z1jPTPWC@lEUdc%Ndzt1aNWF*0W|N8J#3Tt~&5VI&mOOvD~2j;f_BM^{S0C9i*Ma zbgk*fTdj#~)Jc4ZRyH`3pEHg}`#JvrKAoz~uIAabfd?*fI{gRhioo7O0u5;CtS)s3 zuCTkd8$IP)W;Hb>qB6Ihz-7rBQx$Chz}p7pfT zv0$JabORiHIIKNnhP?$_Af`bbI-00%f?G2UOXGuq^s886gFSIkFA8&0kGLzS;x{!} z3&9pYiI=rCeni;8ha6;7SL8HS#J}+_MK1pUnMgskc*b-1=D60!a@?QgI4Vz0r|DL0 z<&HJM#^c9c)l5hWbW>$#~kCDiCl)<2hH2&{&dpYf$lvi zxm**Ip2Hv4H3qgNQbquF+n>4*TE@8}`*{dp!_;@;w3&`_zb<;_vSuXf2u?GP=~`1W ztFfUWz^wbZBvuADWh1yXb;$fNRhlM|!5HU(lT{teUdB|Kj-Z6%<^KR7Q2zjH>MBDE zr_bS9QdoI_o$8~vsiqADq&N~WVnD*jpX=9y`Bt3K7c1;+SzgIKgbyp9F{39S4tXO! z-73DLIcrC8f_U0?jH$@vdQ_It{gT!gRm)&;^58hmPp{IU)SotPGT6Wv-P51ev)!6n z(K3#uf64n?**#AFYofN2U$MX)nVVqCG33`OiRMU=f}?Q*EN}*WO?6SkA-9S@lV}*s zZMl7TKaFWUjFDknWqBCy%_|tDK)Vxi?j*b5KetW?T7a-z0gQH_NMmIxNIA$netgte zEU^Ge7>Odpk07-7I3p56MIL+D%+U#AaR^^ zrunQK$X#P&!bSnuqd6xWpZ@?|GdqHrW}P5}7m2PQe72!kGccIPMSSQ%5v+R-R?xmP?ov1ya~eg8(RA!x<;>?@57H zdq*Nwg%6n=flO!bcRUYlbLmoBO!rqpON9~$)z~Ap0Ae%1>B}7P%|jH?rmQYXHVNJ3 zLiiZy7jfxdt>}5C33I1SzY=ZagKUty-kEbEhUaU)1N5k z0yg{q0GDsa6%KGWw-`HeD%w0d{J`F1oeB_eeaX-Ard&-MLXiSCf^Y!i9=^W6r&?Ny z!=cn9wzZZdc^7v=jql!``nAN^UCN3$3ZtOwj30h#q*nqK%Ay9wGFLyL?@l*UNJ>fb zK}GH zg$$qH1CdcEU0onX(p(lJEuKAk4^vVb$rmieo7da?@mcP|DKbF-^MHFF{8Gi z$MB7y@%sI0H@O_)f%+T+Sb|f~V;=P)%_4(|03O1y_7*Rgy}n7v3!LMpB%h`!s-d!= zNW}4iwN%`0AivN4_x}J|l+MIsb{EiaD)|}}(O~UBcM?67zo5-mnpJ36a>s54Pp5j8 zIM|_f;eC%f(c9KWbRYn%rmdkHDZUpcSaqd5*Md#v2IOOA;Rbwvj4u2E;suIV8yOMi#`qf67 z70a)12?M$IsECfk6JOB06Nl9jDLkKFbvWB zsKFhNKD4ARG7sTE3yw(7N;fA>yn2I8&U;e{pa~DAXvm}-fHOvM(tr=vicHb;pkd8O zFoWg*nquUhG5FHI>U}9N25?3?R7VTRJo*Y#o|vXE!KRReW-LiPPc+_5NU@jbIID2k zGhpJIl0Z~QnY(dTW3@bHuPwU9Kq9OvqTm(cvXxH5u~8ww6*5K712t_zu>Sy5GyJM_ zJ28a=>DI87N7#I~DvM{wD?o(t#%l0zN8KdSgClfJqt}YZ+DoZih@@fz8UFysd7`Zt zfj!vw=8Amb$Z^6M2qY~qIS0~@Ih0@%O)a?O*3nO>ow^bSZZpj(XDgo74*jQ&ML*B^ zFnB)0tqw1u1R;7&^qyvWQSuz~in|DKZ+dWS^{7WZ>O~4VpQSfsA^v75LyAQR%11-% zNXS9PGg73UgR>+XTfHtA4ECti2{@-ZvK~58y1lLd7>@LZ2dJdqo}z=tG{hTNeb(Zf zts<%BnVMYsP|#d>l;fIDICrCrbJmZP(5wRaoOPf}iV82KCzcI80Dqs_m&_-|;+6F~>Ym?0{XM^F|lBr4WEXX5i7}dN(y3$aY{A2PdUT zu|^0P9<>OC$-qC2JIa2BlWVvo{X7h) zcHs60*A)4s(FZDfvNcSeMm?$E6~M^Hy*a1zQw&B&e&(V%B+(hSzJhQ|VrBC_>YVyw zr1Ke07!m7{RKuO!!Jx|CrmL3X*w}|uxwppG;B?5%Dc2^z464L*&0`739{J5UPmD1F zv6dE_cWBX8npRBKk5`;AAC3U4ORO_+-4&92%Hh$sBkDE;<3;u$2mbWg|saeOb^&aeBuK zD*`_0&MQ_MnUs9j0f+#APJX;sEHCF!K3&QP$@KK*g}#8B*Rb_)sxej5FK_U5v867YVD+OdpKJ)G8rg%U7dcSRRr=~;X5ZMN~ z9ud-4gLgNMBid;sir2ba%ExGp*NifZ{vZCj$$Kk}<79F%{_s*U>0N5-R?xO019G+o z8-d^a{b|Qu%jI1_9e^FHYIv+fRk?0N=u&R{);MV_E*o(`zH;(nBr6fuAa@m=BS^fF zlE7nd&P95H>hQ{ip3pNs0cBCh{AwcB(#o>MrbMz}kD4Vp{VRB8RTh(n;%6)@AHyTc z{0!q9&PO7jAMYYfsvo3NYm;7oCEb#{cBa5wX|2>X7Ij$ zf#X66cPa#Z&Cz!9ex9|hqG{I>T=~yuGejb02VuhwglCS#*Q3ic#!)TEK4BPAQ=iV5 z(@3}w2P!ZDelhJ%S)}BwqxgwYQI+m;Zw!&JUnxrrV`wBF#Ph)K+|*{_#DK0#6;O7J z5ypR(E4hSTNb0ZTq;4=vw*Yn=Wc?{(8eA>sUEIdf7AIx2Bag)O2k0nE8wKph8sWaHMLusWWs z?Qf?+4#>bQvNQ|zB#v{6)#BP$YQnruJVP`r$K?^8GDioeBR=2Gv9+zsdmi9GXhSZ2 zGH`3tZgl;A&@(&6Nj!|HIqSxMrBIo5WGd1mGBYki6$j_2FQJmh5O-?boMy@#f08Yv5q6-dWpOe-i*S{MHSzD-tx=S0Dj z_u`woj=!Bk$0utIjqjc*zGx#E&M2{5=$V{)o;%iS^Q$M*`c=*9MniE~@|~B9F5!SG z;I$^Cm5Z}J53i`Eh8W-vrBXKpxh&aUz;TM1CRW?D{KWJlkyT?QBGRzW-OuUXo(dn8 zn*eYy4jb^OgQF6@U{D5kF~=WXw5C)%hf?RKJYyX_y8bk*UokT}<7p=yM$^FdBk53F zr`jQO2fyAN{{WtpvP&A^$0qIF@$)a%pA?W3B4-dUdU-Wl156Z&RGG9eRJBDzsuL-9t)#VNRZh|Eh8u1O4Y$JFMZQ4Lwxw(zO~jtEhK_5T1Lr6Nr7N)O6P zoR3efBygvm$j|$|r0!AQ9f#NSs_Mlv+Z4dFC(O#~ey2VE0Hrg_knU`K)!fI>WDNdi z^`TllqpViFFtfRB0h%7>JHZUu@&jvaP`~4l=##q|?<};yuu;n;V$j_MG%M_vwnp ztL03%tB<+1iryBuiQJ|L5Xl+bMn^dSkIasqyj3Ws##C;=6|D-*cl(;kHiX@ zo5@I|4#pXAhC{UaHy+u?r`D`bqN>8v##n961c*l?sOiDvW7nzR)=c}Y2!dlIXZWLh z{H@;}$NE-~lxL(w(_5D#Ebz@1&|O%DVlotGAI_28)ds#P`f3wQrrh=WpYW}c9Pi6J7fIgig1~(7{~_Y z1Atot-}zQ@5cpl&SGmt5){145Ybi+h+QeWFemTc#nR~9}+?s3GmNs85IKkSx)MFqn zKAH7BO;wgRjmk)+Ty+Fsim@9#oXaFctgDvJ+>DQ}^r0hx17X+!Lq1u00WMH zTDVEY`>R1Uecq;V%>e#&J?+BXUCATA*IZj^HmpM=Ry`_E$JV1! zQUOc}6|qjuB1iX2WGN%1E(bU{snB*8cNJ>c$yOUlUgQkosZ_CUEx;$#3Yo^}aoo_3 zOhNN?`=E-AinM18+f?H|wG@rAL(t&x4K?IISY?Rq&mOgsk5cYQ=AcqY1Y_m)_oz#@ zTdqARk}~cjXKADpl^aGmtrU9`aqi#{SPnm5r7_r-!#U(*twdXKEPo0&W3N;CRajRf zXT)STEPZMX$3EZ6o&Y^g2kT673$Y8d6VjRi2_~9Hy*SchsR(JNnw}^gc{U=Fdy&|B zpFvZ#jBX?HCsUD!57>dp;B?JPoKv$ApHBqTlG@1%2PIfzCvJH5{{Z!7q6ZzS(@kh1 zWhD2(rNO9!W}Z4!fV75}KjhMmc%TFn>KRIoLB$}T0~BKhoT^!{qna=e98qup++Y)q zxXmX~p45ysw$q9q+h)sLa{tQ~cBi%?}~?Mk3#7##r5TC)^emn>9ctw>`ILMX{nKm>&t z$6kLLX!8?{5suiX=5k(RwTByVla4AxNYoPFHy!9mNpGFN_Ul#_CC)I+YZ=d_%1fyM zAPt}q?Lhf^9DQobLmH{d^X%OzfmKgYkEUu=(+dQ9&j8?hRKhLCBxL($nlasA05}oQP+KD*fv-cFMj8=q zK9p_arAy`MLVzq7o{|#4x@^AWyry)vPyD66%I`TS1OG5 zsTG(~AC#Y3ReT?Mr>X+L1%Mz5jN~^b6ozB#K$(wIStzts(7TZFOOHcLDy(u2J*YVg zjD9sllVJ$PFnwv8Ks~8}Sg&4bK6MmZ%n3q_{{Tuyj0|o3vrGlC(vx`|X(aEs$L?Xq zGn#f=2a0E#ig1`yckC?$5*j?lBc(Z{jk{pc9Dz@@E9tOUX>tw@N3|YnRK?+OmI8p5 z$2^dJwI0!RMRGojgv@C3k3DK{E*{yV$Wn#&605;(!||h@APr6sXDNE^@|_^3-U=yE79upKz22P;(st)Vh(kSk-YN{DlU*d1!Wp4cD)J?QhB zJkxP(NtbaDAnrN()PhKvPW~`Bz^!dN;qQvINRn8ziBcv%dUsgQ*J}{prB7+_)5OBmhne|@BBS@yJY)SjNkF^at6@+WT_cABc40sKT1^P)q_^n z#!$J52pIfnMxs|B05jI8n|VRxQWRzC4Iai1eMt6=Y-#@hY(9DCobyWBuHb$_f^%7c zM|x0#m({8EAGMKu>N~nFJuqnv`>@7pkWf2Rsjz+F%~!I5=ub0!Nq*BI@A^=!BN5lF zFrUN}u2{s8kG-FvsUwsa5uRsJvsuWFS892V){oEqkp3U5}8l}WCq=k~PCCJPXI zW3^q5@={05yN>4r>s;`-T#yhC?$wZPiUSl(J7*QiQx8vTSk@J1zUJuECBtQvfg@_4 z<(iI3?OZz~j}sopkWZ(zb0*?!knGBH#~-C`LvLmv63;U`70cxQRfSwUDOum{HHBGJ z(%*SzNG{0AoxqI#?*wD5Qe^@~M+$`YBM0&PeX7B|vxo)yZ z&N&5+DrvgChd9Hyk*%ud2+VLf10DXgAiQg6*DTH+6nZ}98;Pb8-yya5I(3# zpy`&Z2bXfdj+@AA_N{s1{wtYsHL;k}uzlWma!*~^&-wnesPS%5B*`3PZrs3+4d>D?3Rek_aczRE&^^{oS;Lat`OtY9$^_fVI3%6pUrckZP&YrvZSCZW)*k4dCF_sc3>!1GsQN=eK?(`a!mW8D8745H> zw$~R@%_6AD1Cx?S0CGC@&U*3B73R`!u1opmM_lY4WMx2nZrCsh$@J<@DkRhPs!I1U zunae-W7D|&hp08Rb>g#SZv~c~tppIA+u=}-@BY>YPMjQ{devzE0Cu$}b?+H5X*yl3 zhCNlT7F9x7ZIm8!?s@e3ilub6sT5|`dH0SPSpWm^2dz5$Tfe_>*H>=r7{2c1v5fwe z3R_7$m{_Ng{{Xs!aU;J!g>*-mYc@sJ$gk$gKJ2VW&N-$ZG~{mgBi_258^eioTJKUa z+Ue`J4~z-A@T_r@on@CHESHi)$Krj2bRm9FdWpG0=>h;-A(bdo4%FD;#&( zNmj}z&t55wr-mSGB>gK|>FfpUzh`@cZV&FsLA$TicK-k(t2Du6V{at*^&lxfP!AQ+ z8A+MF3I|Iu^6@&1XC->}G^uT88!wsWIM2+hh2!hZSu1fN3Av6~Z3VlUfwzvNgV&n1 zC)JALNR~xdM-JH;figp4BXDguxXwsX^-^+}`ICM4u{Dr!mQ z+*fJM@A%Mk=xpk7UK&lat1|3Vi(R`-Ai&k zJt`HsF&q$flR`;}8Gyhik7|~OeVNkRt-0D5fbs*;d8>*7+?9qVoxoLHjH2j2GPxvE7c zbEcJ8wXTES-Y1+DWDFRTI|8U-)JDI=`QvfpBC5@97I_j)#}Sc&`+~Oz1dct6bOyA} zop&%yF)T{u)*Pf=er4zGuT$!A^`#mvpk0t!&$N8OSb)r1Br~2e!~${9ZpJfEszq+i z?w-RV)U3_DzuK*YtQ;^O2 zHOi_d7xUrb8rh8STiU@)#nD;V<<%W9uboKPX ztn|H^44I@x$YIGNJ4Zw9{(Ds3U@;g96B#+@8<+jljx)x6aaHyr9zyZZf(=L;1A=gU zO=zjB6V0g-s4!tQAfzEq+Qk4zJJbHRn zc`5j_n!at?SSnquIv$sl($tzqsA4gsc|QnA6{`Bjm4}D7-PC$mB<u8iqa6EWYqA2j0sUeAxisc{{#6fM09gvQUp-GF zG{83=pnA|B-}9sn25>(BI@3rAK>0uf0p6V1+rc>W6<^Fb=c%OM$8k!-CIm1U9{kb} zrGY%Ry+x7thJKW9$REy~fONkw&Ica-st|eWPaqBs>{MWk_r+4!LyadieJVtZvErBv z>rYXRMO})-n7r9Ij2s*uYW0<(%H$+);0|{laqG`Y#&x3=a+F&$ZS17DU@#OOg^nwB zD@$8UC_vvPI(O@w{{Z@`cVvPUSmQ!^lah9lI%C_~tCBYc0Sb&^LH=U6r&d*bk-T7| z=2-}(7@!IY?ehub4CjGSKIqgrRgyfC#2(*=^QfYoWqpf)#Etyw;CRg}&vq^7ewO`Gbu5RGXw&nScZF1N5rDYS@8`9zg&Wz#^o|umlAF z90I-n0Q%L0lj>HM8M(O)f$dI2W;hFx>r$*}KaG0hB!81uQZ(-49)gEaBQ+8fgV>Yp zQ>r#bPUV}X{MPn+AwGoRK%aObJQB&mmemSDD=4DwPQRKI!Czj*2 zOc}Gmr-=_tSGCO~a@edx4z%8C>G_A<#W1h?G%A70R{5#H81<=6J1sMD2d!5%#3(|% zky3!JIcyqZObEg0P_tz5QD-6STk?>OPJbGO;blA=iikT7^x-KK)MUDa(4ikZ3Qk7^ zb5B{gr+J&XBbt2As90v!9jWTs;LsQzrxX>>LsI43EK9Hx!&0<=FWwajk{bq)x$jYF zUvjh*h8e{NJ95LCX7id|<%T+%y-6HcFu@fW0Q99SM+I|D;GasQOB4Z)O*w*)I~s1& zo(^cp0OptoNgYjU=w2VyJV0hTb*s#A~@AmbfRIV0DK=*{(oox54b1PO1qXOgG_74*kUV~kfTscYL+ zkD52_C*>Kz$2|ICx%buI$`0&M$OZ`;hzGyr&OeoKI@Klco|I`qD^tEcE`k`*L}?Q3 zz)WyGvGlCTwJ#6fLnOCaHH6a0*kddxz~iP{A6!=lCaxYpxo6`6*x>P;9y`=+debZX z!#Ow&{6mrf$FDs5dz#vxwB52N?Dk08z3{hzwFmzIMZLJu?qoPsELtMRoRGx*Fc=P% ziFxq9U5!kdUG0{u7C?+gAdW`kIoii){20_Ncmjaw=0g7fyOZX|1`av>Gu!J?>3Y4^ zn9@gWbt0(2P!8XhJ^jJObuCV37_$=l!}|4)m~OOfLNrF&&i3!KB;aAOgOliMHTOov z8CfJ9RE~ct_Dc^NUMiBsoT~0Cob=%L?fkzQ({CHX?xN}eCzpv8ojC{8dUJpcC!s#Y zKBtA;MRRR%*0(W91;U&(QmI!5-A^@Ln+@~uee38*{9&ftTt{&6K+_>*Nmvcbp19*6 zAJ(idiENBhGh4;ibM63^IKdxW9DOrT>nOd7SXV8X^QtRI>l|^Hk(dQU86=*74(B!P zJ_hg|wuJ&}y1Yv!rH#mqg0OoJ_PtxTLEN5#!~PMgYuRq>^vfH2kUnW6i9rJ#@;Y_r z9edV)iZx`q)805{*(O!hLX(gfb@nHYwVd%Ot3J~00PYw0VPq_i?+WK!FdbI=~WG0kH5v2^W6PI&c5?o771jytGh z%Wn1=#?pU;o;^oX%;b>*7RoO9XByh2hy8|_5Es-B$IdtrAm{P zAgCGoR4AnP=B4r&ft+O4bCgz$xTnx_T)VCbKbrLHm zN&CXN`PcHA^7XlHE0m2Cg$&)v?@s>Kmj?}x{=HLage*2NVd_Of((WK0MP{f*PVE|d zR~2Mkj^Q^KY_aRtrBC+fa!4Th0)I@_PUD>8iagwZ_3EXDQXy4ny(7lW@^0POW}zzC z``PssTuW9XMk}}<@v3W)YA=Yh3z+%ewx?Y}Xowl(9dlWZ<}-%DJ?W-W!vNq@Q0CQ; z-LyAj)>{~3)~`dUZ(;L}PI>S7S11^k2RR+_QzJV!%kuhs-`1j~3U(?rBz1DU7X?+? zJ^Ai2`qf!rAmqdwzEtn;=z0#dm2O$xRLZD2KVD4(2 z)#OC!5y)RG0n`%8e;STx3n&bMhI8_ObCK8A1B$e|#l6SLDk&a}qNiB2`3_MYB1SVC z{{W6@-f;Mka;LK~OfiK4Wn{)d7$d)}MKTD}bgo|`aQnjP7B+U~JrJn?!VV?ae<55FlTIO;{(F8ME{DAjg z>sKx>^x2hETC(lVN-o{mJx4rXbR74g;J8xK1Tmq@4WppXLEiw?NnqN?%|aW|fz4>A z89R$qRc1}iw{TqW38?o0+N_wP$rya`&-11<1NaYoa%*KYX44_wa&XK69Q)HwJ#$iQ z+xLcjfuI#ol+8Z*7?wZ8 zdB>$R%fIAzCj^jb41*x5^HCNqNk4k1q50T&ZV!4=_yi0NdJgp%$X=gZ(u0G?dUg>g zkg&lgA6|ZyA`p(Oxg;Fm)qTM27z5s=Q?)mpxKn}eNC{oGLZ8-w34lfq=Rz*i&q_q=#XK<14I)SH+T#YSB!_Xy?NwcOayh4?;9;p+ z;C31gykm*2ZY011!ugpatS`r!IZq!oeY&|( zjp)Tm_aGb-US=Z)d2>Y86)mGXe8#rpeA2njS#;xYn* z>)Vst@vL#JqMfnCI(3nYF&WM?{(4m3Yl7k#1GWR4<7VTW=hqk=>zQHY7kMK2@1inp zp|neDiJs9TGRL+hL!6K?kPkh1&12g_(My)c%hNT`YBI%ohzm1K89zB}?e^!d{{ULD zh})7Af$NT*ynYqv&~KMhIWfn~$dzO#ILPGV^Q{YemYODtS9Og+DsVdY?a4J#&gW!< zk<#V$$cMKm&1$<6^d>&Hp~!Ox{dlabFf{l^^ipa-;vjPbXi zsLN-ZP+N>(XWo$!-L|5$A4M57XoetSNT(CY8Of`Or=W=q!?bd590m*-d-UjjwAn4= zV0@HiInE1id4%HskH?UZ#h9jp+2JC(m^0FogR>3?RaB)MV(FGDCpkcTM1Y~;E z-2lcM0tX(nZER-;6>b|wbl%UfoNWb9H3Lffj!z@LX(^`cfQuj=rjxBWkWVzy!?3`s z5aKcDXwSVjr(U#~_M{gi8*!3*^c0}4I9@&KFmv1VtIK2im6%8*4aU*N4}6o@anHR( zsqU&sDx0`G0JYh=h~X*E5PZ-F;7Mjf(rcE=e;9?DFk4i;0%6rC#Zv-hbbVO@${z#;DEfIx$jZu<~=@?p!1yK zm=cf=UOj=NG34feN7ko}bI7T^h9q%xC#6_G7l5?Thv`xdI#f4sF306M9f6gP8yT~^ z9-L$ItNYs40D>aPv~CCk9Qv{Re+r>y`70V(36644%t-vY3ZC#ha*gITagan^7xAtM ztIw645q4J`^7)`d%BVrk4}Yaq^J53*1Dy8cQpq#B4dt*$$}!XF?M-A|p_liEC5jP@ zAH%g=VxolI$k^|VWo1p9`tIAGZ1*)2-4R5eSWm& zmy8ksBh#p;A`k zhHUv|Wk$|A_L6polR39VM7jtZE^dNwDmHwKX9agkOa zWH{jQNVx;8JsZ}YwNE0Q`+*qCbn8#UqVRd8+yLoKGG`)|;4^s#nqM%QL-SFv_NuZF zyN7W~522{@>L}esg5>*{k6Mogm>l+{5}Fiku%4sFed%y}(h0q(Jjwv|kAwDiM&D4> z9^y#tBAWsv1NX9($t-b`fwzxV&uYD`>K|gfn%*({$xdWtUQiNnGyUVw;44ePCGEZ& z*dzz{mnK5)K3$`G7Cz@{f%UH)y745oI`*?+sJk}#{#iql<+?Ha!32u)t3}nD@_RU;(v&|?&_&9pL;kQA#7br{Y+t!6CQ%K|`Om+8$&WF|=n&Ilv{ z*yF8gi7tlT?0^H7Baz9^IsQlR`qW=(FEEn;62Oz!k~;okpjlmz5K00F_s$9al)Hkv zkhlm*0Y_Znfc|6ft4x-Sds~A8BX7>-3;^ujzTUa%-mFV>uMf;VQ@baxZovLt{{V$! zs}_iIaEI>>#YqYh zX`MUjvZFi2DMlWHkN&=TQT?!9C6OGvv-}+V!w5LwhFnEqeA+ga~r^tJ2m;8DFr|xV-mCoA1y!h3`qa(g*Tb~-oqG~4AYi}|&RWe9;JoEBn zsRQ-mxlJPC?G<5()yj@T=clMY(x<(=y`K6Nx`r6-)Dq3OF=ZclN4e++uUhC;Q_#V} z+Oj=XIPJB|`*KENxso%FXCVF+STuY9Dhr8bySbX?Vhpmmk;v}EtU(Ds4Ro=9ET9Q&UXHM=SICih~4>diJV~MPO8@Ri=cczxl zN@*nar3@=o5-umsbIm+$0OWJ)P2HT+muWa-flcfKvV#~r&}4DIKatHVMIH%B8}VMX z0R$d8dsIcnMQVvg_iuWYVSJ3Q-s6gGxqO|cnz!Zyx6DTSy+N#M)s$V4q$#GZ%I;P$ zIjJMP5u+~EV8fh>W5)|AD<;$EMM1YcNcO2pGhXmJ#pq0DQ=Af}p0hX|at|4*rE$l4 zkU=W^+fLl$BD8UbQZFKM6oNyQKA5Q?NmJ%mADu-Ai)r&b&E2tzQqb-oO2B%QsrH)k zkCUmT71Zk32XgkyRrJ&tk-jhwwQ~&Tb^`|rF9RNOH)eo<3wBm15i9x5^m&quQ>nsJ+nF6sfqq4b-l+CVLxJIA~NaUzZ~lJbE6V zJ-*=ADJTa!SRd(8CE^kC=bUgxa(yWuRA|E=GdLrFInQ6qkL6fT+R0iEQ%G_rc`XR; zv`MYoHg|Fq!P+0MPMI01t7)qui4r)Zz#kxW`HtTHqyhQVvg%7S61fV;Bq_%q{??Kb;h3{p?c4|<9CMDG9M*Nz7cny#Ch-$=Jel+)Splje|5zkQaH+Z*JVxSs^Kmk(1K3rixGxnP|#^vP@us{uNlP3`rPY z_r`xwU682ES~KK8r)gk#`@*9rH)C)k+O!_c+11d-&D3pfpPf{A8Cxu;J$bF8G{|Y9 z6K+X8GmlYBYew3~831y9DdZgF(q+Npucm751$VJx!~w_|#%im;s{2X#jc6Bez>${E zT8*PtIoi3+T40RUh0(E&eX1r>vS*sqWalh6sLWuvC4IQ6QW|9^lXC6bgPv+3oYnV% zS%&~q8WkP5BZ_xJxm{2kllf31&poPgfGz>+-j`>}Xt=IG5QB<%=xSg$04Y*6C5h>Z zR|}D#{V7;v=kuqmOh?KIB7g|$I?w>59-S%sLC$*AEQEb2QHbkBfU=wlk|#efJmR5O z`Mr%wGuZX*Qox%CPEg>}Ns$OAr?oR_$tv8_)UX4;(v^leB~8GxoF3waxGbeW1RrVy zgLlrLeib5!i5v=+mi7X&p(lVvUbDQqvtZCl$eO<9X( zXf5TP$O7We%WRTlw`^x8JcE(>Vx&zj-s>jT_AK=YH^{@#bH;xfq9P5Bc*mtr9lI6) z4s%#H%C8w%wC}nsw}&-V1%;ckj_5aW_*G}qZzCi%tg1$OsT~GQbecw!bi_28l$Me8 z!Z8d-aqN12J*%Mp(uTqy5w5P}QOiijp8dGsXY#K)u4y`Q<&CBI9dz)DO7BC9u<*XA zdeNV=`7y8u%$ERdJ;$%%T@AN{G`OQfb#W_5P;UXi0QVyUKTq?G8=LE?B54^LVLvXw zdVW1CIi-QH7Erx1Lh)QxG5D(cK2_v(Mui$%tG_Z^p9$#~45rM8$yOm6M%v``?~(X^ zRg-nFPfWJt~P;@jQ6XS_t$Va8DHxS*id18fMe!Tppo4E71&8On|Mrf z#21~-wayuj8T9;r8mV{T`wNC+Yk3?50Cunr59^=iYpyw@TeU>d&nyg*ydBPFOOT@& zLJtFJ$>jDvx%?`-$dZgpzjEZ|zlibLy6ChW8Wl%T8+9&@G4IloxrEc%m6w0PrpDjo+|=-d0>#oJ-b6D0mI}FK8C#&AbTcJoDbGP7edp7fOL zW}FnB)b6{A!4njbTWYoraKj?Bt|u>_lp^g46bxW`aaHZ%REWsix9-A?ykpn=`cMuD z8Og>$#y=Y8oTDjUukEK9C7$>D| z7Nm)_h1^f2F5-HQDWBGtBo2A}YJ@r5?#^?%kiI(P(~zz*c^;IHhF&rFcAx|@4soBS ztv8GlkHVX@;5TntGmodWRe%mwn~~GCJdj2YKJ?b(j^5*%5C{~5kl&>!C%rHePaV4& zp^_?ko;y{PDyjfH)nyEEQy{2l3DoAE53NGEsiTayLC38_&}F+}F^WZra=8VF2am5{ zD$btq?3zbH&(LE%G0=T@{4-EPwIeF|!9OuyPfEW9r}{%MU5UmYmg+Op=zXzV6{eNb zHiB-}D@|?Yk0k-!w~$x?kU8u5Q`X%W6EwTGfq{(UkJMGUqE#e?4pamVKm|vk^*H*~ z8Dmi*Che?w+tRqp$TIP;6V)DTnCm#8B~kzJLdRv?j(ar``Sn$i=yvt+bXv69j|voU6t;oOA^c#U!E z>U;VR%C_T)cNcjBFazaPIA5pupVF~(h|)<}BaT*K1aY$Cza*3O{J5=uGBqMJ1~);1 zMmY2Y{{Ww@IC|)6)aTQsXT}7oL_=h1Fn461_kWdZ7{$ioyEc~fdT!bWamoJx>*u-lqsdgwk+4vkM-1d(fA#9X20Su+{mBY*N3%(bn4HSFIA&qk1|t+za_V{_6W@1g zD)~scPHzod#TB%LqLxdT-J@9L7zJ^FPkiK#JK$!rrni>bc_E!Vxg%n(q>c!$K`VU$ znJlfMfv#my6k&cy*932JI)j2jj(Oy9%`2@2Jzeg#8JIycq6La_5PYW%k-->1KBa-; zxhUi0pYJVi>-zZ}m9UCR^!GVf+3oBlic2&i=z$%~k)M}o$=Kex;Ps{~EFlxLPvjXq zzc8uWyBXV`Tyu))ZuBWG?^_Ei$7u^i9_Y#iRDARqEu4|ql7A6IKrZA(NuYw-86*9~ ztj!v?Ag~7{uTpu=c=WBKiHlcXGZ|2E(U}OUE>NGUN`mT*LuBm7^89%^vq-1bF#e#!4IlNXW_091nig6GVd0 zvE0(|aHJ3h4s*^y>5s;>jYN#yHdDYIGH7SY?IN$==~p^&j9ezqH3Ol?3@|@Yo<&0q zh1Af?EKo@C#4_#|g&y^ysRp^PpqwP1EsXwo;+0sAYSY0iXp%H;sQKFDaMAa0wOfHUnwZrT+aT=tvTlT7$oXKinAlNE@h zcMyHYa9ENF=NSY8->rP*btKmpPbI^%%`5I^W0Fa)r~FwZzK!9SbgOHj0D=J;VOMzy z01R`$9sNl?tLDvNC2dw&rYpK<+)DK4t#RR`y`+)pR8QF>uD(@3HXXTqY*Czr>_0Ek zs)MyvlyY&jlhos%%Ct2GK|D$q8j!N=oIl&FQ&Pr%b0;}C$3Dj& z;ZEYP#%A)!CmTp04%`v_Dk)sLGk+FXoOSGfojr>-M_J(* zqJ3I98MZ7=uFe#;zzLoH1Rhe=ApsIy%;@(H%&1q7EFMiPHCZravGsN`J~4kX)0)Z z#Lp{W0)JXyke>9=53K}e(y2uvZa*inqmkC5B;u7zZU&8jlpcCL8>6$>rYH3(t1w3Q5L6e@9tR&>MGm^8=b2jcr z9-@Iw1p4tyy>ozhr)vn69Alo8;KXtt9qJt8tr=V%PJ32zh09VVGM4-6k?lkuR5%oH-3=bjH@$S3k|?xtbnJW1bum`YJh#_AAzYn;HTy3SyWek>7;Gc zxwpvxu;bF79sdB7PT0nO+UBSki;xFjL(XavPI=(eMvphfQ>kx+)qPg#RSCENbDgRN zbM&g_NwbU*_*EcV8O=QdmKe!DO4c-?4UwCirMYNI>e@x9MYzx zBt)=tkU`1G&MHx;$15K;A(Nk&ao5|WX%|vI5;Bxv{uWS>mTbMK&#>E{%Ajm~*;#iV z%ksr)IwFrXB@G`c4?0mqv$v)ZXT@a|A#xjFjnNmmc=WK^Pzy_<3 zgCOJ|b*)KZk->7(@xUbK^{R)=P7+4^NFusnBPNPP0pJjS3XGx8OnwzV&75PuP$>fE zk@;51kXB@30OFcZ@(<@$Sx$K-m{ey4N7kz2D{XRl=96JyMh-nH$j4)WO(64vDX9g@ z!YnW#ao&sqK*t%Y1-(bFO!JGXM*5o|M3T!aMO!1K$J+Xl~i*)0%!; z_(&pQgTk+ymiQ>$pnH0JzK6<^`HS;YmwI-z^T$r$B=RDOkC&gin(ncn83Hn zy~(VqO+{Um7`Zzl)Bz>u$ZUF!m3CW%jx50(m_11Rxg)#IHVEd83Tj( z)`G>Tv;fI8DH5(m=~U@mes>l)Bk7;;t~W-t?C)cxPMx&1&Wg?K0o&yPC_T>Xag6@}pX*jzRJXQ2yNoIh zhi@bf^@DA!Xv>#jAtxJDoPK~+`1PG8V9ctql5?M%ujSIYDq-c#cNWprPOYP)mCMIn zl*zW*2bgdV%6}71k~P+C)M{F2%J8k65#J#2M{J76mix&&((W=C6O{Q#ImR*R{V8I* zd2o+3q-U==$EF8Q>r}A(tD2g(p0_9K4Zc~s`5TeiX?kjTYXnFbF>V8OJmtMP$Iw-X zt}R_ct+8Sof~Y#HYqQ%kwdr?pf26s&n|jf`>+<@*x|aU{4sq#9`jw=x80CQ;76;8ICTQ_9~%v|sY91mgj>Hc}7I%|Y3B*0bdGlQIT9Fd&!{{ZT(J%u-`lOx;I*(6T3 zx<$xY0xA_vs+kMBf(Nf1efX*|_-@heh?mO{w0asL3a{doL%tC8v96L8+#asbYI z{Q>r;#(beKmQ*ncS+nyK?0vsq){c6V?y1ds`ZZ zS2H<9m&+TzWI@z_jXG-!9YIP-3|?vZo@F>7{{UW3(!C0KtmFJ>{l_%0ahLGl-f)D2 z)SUZvsLxyjn&>qT3*K6t*8c$MF<>3aFh?CR-=}QW2~6{z4|?_JVrf=artWc6r8;iX zLvlf(k4`g7x1PMy)pOK-LbtgDA#+kJc{O2UQ^`AOWku{W?^5P66orpLQ!GGz5^2yaEB+pS{T(3YJ|uNUjnD-6Vt!;3)Z9y6{g=!m@Q%*B>h?s8#5L z>UpU^EPi5YM7EbdD*XMIsXnJ2x^+0C%V5qqVx;aPoPIS9aeYF}w`A7w5@k}y_;}!b zd8;DsF$1!u12@Zv%C8+s$5Z`1Ycm)be%C)x}zrZ_L@XIlEaR z%SamFA|Ks_EDv3)>(8mEi!uKITvVw%Cr}Tsx$lZ&O!7)MIB%4V$EfL&bM*dIob$;j zR`Wct!#wpo{-5DksB2?OlTCIA7~J1Ba&yAxx%yOEozZPBSe4Gv865WZ{#8NVBMU1# zGnOEc(;maQ`qC`kWv`Wikfbr`kblOy6c&t|vS@Chx1L#K3Y%6qf!)Rc$@-t0^sB9? z?NONL3I`44008vo{3|z12@@AF6EVn8c?s*+fKDr5O9}$gw%G^WK4SCiM>wTY$?PH- zCN}{@GO;K^Rxr#X zXh)N`lAVv!splV#D?Z&4Tg%jfFEAOyXFGBGw9b7ws)YU4I})Nr7~8Xsr#(llO&z_& z?fZyiDhKd_037$JZJORGcVl#m$;uqYdv!Scd8;yNEjTUaN6+`9>G^+?+Ow49eGpl7 zDlU_B7x$i8dJVwm--;^iAsGurGxfp1Vn0eM9eMZs3Q$I<`$Td|Qskj&P(<=LEQyTg z89cWkSJT)Ed#YW6(#BdXtoV&vW3!x=BaA5M3H-R_+pWURR?V00sSW~>DyhjJatI!r zfC%D|WXy>nQ0hTPc76s&%yHEIJPg;6@4b&jRa*^~c+uW=X=Fm}9Ake)z+>sRBy}f+ z%|LXEXr}u_F~_zc8p8x=7)Vq2SDtcCGQgaIdex+oI2DzAu*gJ<8l19?yK-_!{{Uy( zG_w?)k|`G_5wKMlP&3XCRR@rJfse&0N;?$VYu-7HM@qYz?TZrZ`9)`K%;%QQN6JR; zmpL2^;8V1{ChFqbWOlalypXY7;DWd~199LMnM9?6$FgQ%cjS@s?fF0$ z9Apgpo@rymviYrZ@_8UA1BC>I$X=Y|2PcdSR?invN0!EMp$=|qoQK)1<?~* zqb!iHRv61;Z`~&wLiNWd6x(ejni-@>m&^0G9#I__1v`&C@(y?abKbhkOL=Wz0!fP@ zmE@1hj7F${`VOZ(PI<@!jwzm4dpSg`WWu=n{{S;FAaF-O#CFI7>%}}%y`mn*JF^J3 zs%VB}|_FvL3 z*{LngYf@7BRlS1Rq;i5DLat14;Ii^h0F%^=0&61sNV?OKDQAo-%Ak&*u1+vP9c#b) zJ;XDkeWpi$C>PGqNGF}d4D3AM0mdpAqrL>lAX4E67|W`HK3;hZf*Uh{?nxc%qBz_1FnC3# zrx`3PC1{ygNT+E+IS11ow5x395jH<}yKe0FuG-s35bH+n&1Ms`mt=6Ekz^PpiRe^h zfTJfo_26FyM%E4%ASGFH%`Bz3Cm1-#%eMy|bKe!C%qgwiiC8H;jyC&ExUi99xlpCo zdhKAquc#oJsH_m+VCS|g(T|5M1o0SF5;#^ug9bHF4t>~lBN#ufW~-u4J){=atfB-B zBCCK&ZQE5#0o1PmA5U5-W)PK=VOIk<-bWR&N#}}kqK?@W(cE}>ErcyJ%zpm>nj>8D zFaQ|pPp@N|t$Sk4a*$hC3wMSkS)y55Mkl)*_rV#*71bP6C9^r69!qp%pDd;}@;Xy( z-dk&^r-D|7SlBX1rv*spYf?)TvYuNx5<8jYj2N0XKOrL{jCJ-twGHNpb7!Ze)yu?) zE8noHqbF_|sz*ds7Z6h0Z8-(H%AbiZZ2eBXHNgRO6yHFVA zUCzhysPbbmkf3ak75B+M(weGs$031KUv9sZP{#tz8gD!*;Qmz`%Al$as^x}1-R7d6 zZ!Hl^WVR4f5R9~q(M}J3JO2PGq$5JuhFf4p(f1o3z>1T8+!6w+fbIAWe@d+!g+h$3 zM&dsMoKw}pL_s@)BQQAXxTSHD%6znJ<8jCzp9l1)9D>Z-xgk&HF;0+{5y;2yae?&B zK^_)DhXm&t^}#>=Y7-FXFoBfr+zEf>QedmDdlqowgIai zSZP!S8;Hizdyb!{=xA=kMM)yrIE}xL)p!qCME@HwcQ@sH_GM=RSS z=~HbkRmN^0;)Z6&H2v;Q0t$)4FW%^CqpK6q2ps2;kyES0MsPS4Se*Cff=C#}XyI~h zS=$?Tz^F`W#QM;x2<5R&U`IK~r4-ZLOmc#~PHAutLrqyoz^NHm9eJkRo}iGZjt*4* zMwN+gyfS^oAPS>9l#fF}kqE(0$kuzkis&E!xFm7yRvXF-oGv{op(;C zfd`&Cb5Qw*zHv?)06b*VP6_Mz3L>JkNF>|UjuSU?PxG5SO+}Np3QpQ+&nFdJsfz5I z%sBhRA4+(guzAjVnurYg=7AIP0-t)8qW2oPD$9S;(XT z19ibF-RndM-cQ~_nLKA4)ahvhoB<-1Jr%e#I+BPereHKoq~IUVH5M63%8^~X9vX`B z6#`%0sR5O7jC+F;S_%Q! z{uQMzk9v{$lG`$kp}8328Sh!`11oUfg?2)uW$?2JMp4}i+mGVKA&uLfDf<`<9!(%q zjtyycNgl@?Mg<&!-lT2#$A6_6U_NCZ;YGlV79dYZy~yBi8nwiGVx_vk6FCg(YiIXKQU zS)xL$8}5$vdI`$`oB_vP-{D*nqT#928j4yC1(=rX2i+V~6`vre1at#ED&bXR0{{j* z0D4pj7>^{9SFb`1d0MIb+mgu6t6ms|+zYJvq%m%5o$G zdKwm?u``KLR1e|F!0q*@ouA7gk#`Z!M>N57>(5dKGl5TA*2Z5uo2kuGQe6SKvYV1m zAOq8mlz;*`bDqN$G{F>x1qg22dQ?S#=m*xjp(N4GC1wQkg%};V$)})oAeP6}^Gx$t z0hZuUo0+l(bKezh*%P^OZf8&zdt;~G>rySuq!7=ZF@keY$8LU7&a1d&ahkTV+6TZ{ z6;SRj3^o19Rg%?W%6J>X}Dy{^#G*6xgpG-M2-Y zb_5Q6>SWZHx`piAU%YH63Ji>`vz|b}6dTzU4g+oO26(Kqs!r+y9E_ZjIOp)G;=cib zX?9=`6by_L$Rzjou6G%)iCozz{g!FNdpi&!EaU^qlEm@NSWBywO~sv89Oe4gIUVRp z-1(AYvv>T3N;MS0{rtJ^FfiZYQ#vmCL~xq6tmvL=r~aKg+#3aCY~iDYbufo1bZB>n|9{8OY>Rg zl2A9CU?2Xqb7K6dAsDB!@F@FfQb@tvG1I5?t-XVLXlKrjqTX#jCTAID;DAZSeNVkj zHlY-lMTqTD*a4r%9CP)qL+$JcA~^64d0fyhU5?;(wtC{SmR_X!nWS+pD#-34HmIPp zF?Kt-Jd^%SJT z;?~wWqdd0Et><}}9-JR)rE_m*eU_RS)#Pl4PzTK1Wd59*&o^3tQ5l9*`Fd?2*CLIEYSyVtJ=0Dqn; zq`nntW-X^l34{H)2`lPP9X~p;HOvVz$rZeEZO#Vcl|Nr!PQE6a=8Jmw)FlctT(U^3ap4=d?S!yR9PT>AIPcEVPd}&htlNDyZ?<_-#pTF^ zWo8Y4dX2$G>=Ef(hD)I)%WH_|1#$AWNF&(v=B(RY>JvAYbp(op>@r52@zaykcl=Fn zPcg3uziDUqGdbaDN&A`@dYso#zuHpXJ7dF$tOPb)m-Se5<(ISsE9l;Aw$2hZ|V8g2CJdp3zwBGo9BI)g)p4-Ja7kZ zZawR>4UMBy-IGT>Ts27QkwveiY+L!6zzU^E=N$(feFbXT{iReScLlM-Mx^>Fv*MwO(-2soKiyz#Jakcpk&k`PIvvQxIF*#}|+yOtYf=(i7aC;CAi#3};8DM-SuL)Gqja&h1Z(;pezg#p-Q;}j80Y#`eb|Vdx#VQ}Q$&sB zwkvf_bQR0iGfg2Vfe2H{Imh$;Yiik~w_wp2Gu-XR^Uh6kwghdFckC^J%H%iK&{l?? z?F7g7hDYi9wcIhEZkhbWWm+596F1|&m!Tg|m;CWSLm(~=(oZT74CBAOP|U3^5sB(u z0o=o$qozOl)u9td1ZuJ|+C~%rSD@pOTvA-S6t&zWgotHkFS(SAlaP4nSvDx~8@9Na z<94{(p_mUeg;AVyobYqgt!Up}xwep7kOKVJ4c8yzSh{#eA8qnHu+6qI9Q=TBfu2dv zIq9EDx@qz|jOYZ=I{y5Za56w_4EM+QpH7sXbU^?gy91KLoc(y_v#ukW2?1h(PC#PC zyJzc2!emldZ)N}-;J2?qNmEw6$9|SKW4u^n3YbObte6D%$F&uQn~1;)Mm-snWAHRq zZw{WfDNUoU)5FUx!Jn)#?(<6w0C?TcJPrr99+fgp7F~9tcx0g z5J{HW#y!04&m0qhoNmt}>)KWfRYu^^$A#dKBpJtVUZ?Q%t{KHi+_+S5T5dfehCSzQ z`K1J-?fc5S^giI6<2+`j0Sgvp!sG@UvT)eWG2Dy~Y>H>@Vsj#b<$9wi1B`q0&lHws~OQYv$@8DiX`Q=aSBoRB?73JK_c zo8(Ji_Og45u1?*dKrOvNKBQor`wn|j?brZxBjr324?N)e@JIguT-0!raSV=|3IVyX zj+n_+o>7p>w{3@ zDJNNOfpfdeLQX*>XBg?%03T{aRwPPf`G^g>_=Ypj)Sf-4ZRM4cA-zFGQpX`ia6bW) z>&Yh+y_)DA)^7>%i%nk)%S6ZXqTB?}h&O;0{6P4f`D9>!7#<2+{{Q_r_fDf>8-tIcXoWw(|{ z$N_LLsv^N)!y_l4$vNrXhLIx@18O7uOB`7z5NRR+>80P?< zcGX>9R7+@B#@HltijCrF3zUp25x)_R6l40FkSiAU26KrC$GvkxjAc{1=L&34tH8QYX@T6@Oc zoo! zSrl$^xa4gd6Tru@tW`Rm(?gQ2NJ1siWp0-W&jbxRLKJTKwv3Ier=~^^Jx5B8J84a{ zhG86$%_o%cDGP)k;0EehnDg!F+JkG(S}CQC91q`^WSKs7uYtm2;4}cgIX|$GvxcE{59ALbuU0!vwbW-{}_;=bMR$+q>Lg zu^q4nrEziC%X2JNu;u2Jl~F+D$stuo=Uc*8T*eh7oa~AdO0qas1Odqy=sE%T)1{pw zjh{V6)d$kA-f0q8%QO=&?_*-G&Uqg7kZu0}d6GEytBm6~6pzum*hxuj5ZL1WoOn0!o~6&E3AehoGqe`h%=UxqkS^^Zf=t8iGB{i=H?n`xdIK z9^!rOyFec*`U<@k)kQ8i2lF*w3b4A8!sjYesq7Qu*tPI3L?&nNj+6Omd{hbq+Mt5r8-3V?Q?4ZQ^! zG~fv}t7ksqsaD{MYo-oXrh+AsU4}^G7$H21%oN z9jY&$ly4^$b`c>cRw~|=AC%oj2&p5%T;To`)-0#4D-|gxV(gl@ z(pU|xk&jwXKpk`SrZFe4YH1x0@~cYwlY0(h=sBk4f$2d$^n$cVklaNolbU+u554$O zgvcZh){~M83bHWB&T~!e=1@8G4-G^UPV4# z1#(T_-pTf-2+@~_peG7oxS97%AKB! z#M)GF2pxqO$mcb(bX=xkVEF6KDzv&((f#e-Q?zlGvdm zEHTrLwGj+B#!t0qq?r~NRk7>dmmM-G+lb?BCzyce1P^MU6Bry3LC!EoKE|9K3FQ7_ zjQSPgmY_E|9Ov<%V1u0ErOhT3p48JAz`J-ngX>DlNX9ctSJ2YrimQx_p(h{_O#>Ax zJ~<0b$b95sg)kf#VL@DhQ^z9YWbMG@j`dp@J;g54ezlb8Mn$Q#Xrq}ng<(^qtTUV( z)>LGv%9^zc2IY-$RiVqNyegN%#KV~J-!#8vh4R@Wwlh_k_b9_0la9S9q)IXZTOGaX*ev5=J6F^-H&StX+!P}v zwTx!Bn;fb289d^j8b+YyH#bZ%tv9m_xJTX3KQZR2J+#0TDo#1)oK}jzGPTKcxplDw zg;Z=Rg-@WWnZti~ADvG%w7_owkyYLzdBGLYPS)JYSL{5^un~aX`0GfsvEw9X-l71H z>%}7mKAHBdR1qA^uw1@Aa5%y1Kz13!^r)66Ae?dQQy5MalpfjUljT|sUFtK;ZkgbA zrtc>?t0FYW45uTn*WRXBEzixI=lFZnduXnM_HFejf=w!h*&}ZKrtB!Gmq_sASl12XjwX*C5jz5HFf!iEYg~kr%b#~|H z87Hq_=TuS?xfIH{2j*eOQ|-?toGl%r434dlk_T#Bw7ZVeHSO+W+Cl{kM&>dMsP@4A zf2AO~f=Lui5ao8{9s&9v%CdwFfF+k>0gg=ox|Qy~djR(C4QK3N+p{a4Nh_mpi$QV( za}2NhAanfc=)Rsn2$4YB!m;Ng@vc}&5I{FN^ZxZu9onJgNdWZS!Kt1K>$yt3ypDlx zPT*Dc_8YnUJ!-^Sg~U>vNYa9G0X=_C-oN2l5b9Qn*>ojTe4q}$UVoSCS0UCc$5>&wLJh(?#c=*^V=ie)pJoK7e$tRfnjZ<8*H8!K+Hl(Yo;MwauJX;%O8{ zyH&^po(404^!sm2A z!bDU}=151%S-NC*9sd9t))ny>eWh|-DAnm>$}a5gY^P|hAd(m1w#c2 zJ9lB19A_WSq)S;HlpZ$_pk#IQuIWmgm76*2@3FmSbhiV1Xc95tr$QdPg&p*?pN7pIxZdb9D_Ar=&!Zlz{csn|K{uOLm-I)di zg|pSuoO+xZ+J{Dp#!)f`FL^%%FXC8)P6(j#ZZD(x3v?h%bd9cuK{-L>zwhNbJHJMvmM!mHzdIw*M?7H zk^$^^AD^`j4l2mS$u?U8Yo)+fkRu3~#+^tckht_8mU*VjD=z6JA2RjH#sSAn_Tch8 zed#7|BGxOExZKZ{V561K-X!E62M4xIREks*m`t8h24-`)RI%%VdJ~SFxgUhXU58dS zdhW}Glqnu*kP<#t8+K!_0P;@<+yGCdF^eRzH0lvP>oL#W_2a67M^1D2)JFE&EwXts z%zVc$8GW2=7*H{sgOBj1CDqZDBZA&2VlxCLCD>L#dImW;+&Sm4=cQ_sG1IvuOv!T` zQbbE(gn>!MamGdmJ^iuIBAw?kh)7T*Yy-AQcg=KM(%3E6W&&EGNoUM^WaNo|CNgxy0R8X3trxFdF3aB4U z^yjY}RVQ;H=t-SM&HIR8s+bG6sK;`B`6OrBrBw|WYnchk{_R|HLFv=CKb0d&O2`68 z7DWNZ!;()QUfuD453M8aY48g%!xnDAKpwp*H*uw6L^1hnHv~X%qkiQlr%&sjYNM*5 zWjjIObt0_G6n|zS88AR3Gp^B|q~ouCeJU9qMua4yF)U!l;v&Qr2dOR8;Edw~&{j&G zyy=~|dhQREoRreYj(F)#g5i6@Snam9A3 zkmcBQD>TR;ia7xDU4Sc`ukifCpVW%coI@p>!Z8}|EEhS+?UT?2UO4NMPgqtfbOm=1 zh}b>bx%ze<{M3?jwjhL+0iP?JWaIPzeQOr=IORD@R#1H%Hp1Iv5k`a!opL!O=b_{f zDkD>kUKFB!J{jNO#Gm3z|U&I@T4AIr#0!f zd6w9&!mJl;gyC3{4?(!}>IQ48xC<7OtuiX?TP8t+migw44B&LearpXHKZUKNi%vIq z3lX_xmO{L3DiA4dpc2QY*1DYA!=~QmiSnzVb>)Kg+8JQtD^g-o*~y5pF=XI#!vpR` zWat+X+G@Z>ZxqwCQY0-W@ICUUrc zYlug<({I$2^5%kEw&mqWJdfrpTs!BY;0UkTAA0Pytgwo&H zs_l)TNW_FL*wnU21TRyQj-Kb7*DNYZ1NQFvo`3y~e8{erQ#mJZ%DFi`2OaTHwwHas zXtBA-A#vrm85#8S1pXE1GummSM+3(qDQOj0HgS=|ae_}lxSlHWSi~U)-bvJ;P{mFg zA$FkM(;#|(dbIlGt#neI&pL<0nvKL_V*{*vl|f;FlbxV?lY%PNv7j3Z0dXS+m2OrN z0|S6iw?WgUKML+lYY}^tbXAjNWg|KHvUcss$r;WugOYM_ip%lLLfc5Qw=@0w`3k5& zF|s(u0RU$K`S(9ssyK;Msbb?hJ&s7|>m{sLA9Z(>W1seO{(iNyqWD(M{?(+NE)VbU z8Cwby1B1r|6Zury)q&GIHKfeJfV^jv4czSt0LaG#=hW8Lg7LPRvKX0L&S%@$;Nau& z9cf}`QZ%m@s3}9*w)Q!>ydxc~(kz#%(S4k&xDSg2v@GuP@5LsxEvzL5mb+1*?<#IU?K zAG*QXPBDye^9`hDCpjMefc6R*CHqD;rVM;}YQ4x)p12$ygk*cbwlK#tKFfCzNh1Ry z^4ozYE_$AaIO86*Z!zZGZP1^p!aF@rGK#``okA-cc%0pt3`Jal^AF{Yay_ZCY?9_- zZ4{dovBBSg(>cJ;{{UXQ=h18@v{*`8tlmP#%%f=a1P<+vta^ZYRb%062;@kT4>!w^ zh>;~IUn2}LjuagH$DRP`is_Cz4eDa>aO|;kwuVaD%{8pIDy!tiaLil}$P<&) zbfP;OnJi_!NJ+JYf;@zP0~}y-c|4AuwYO=bF%~j?pN5Nk-eiQXF}O2yz`+LtoUJGJ zO57xIMR&5?+#lV@GsfTxdJ~Ksah&i?KdozPk?awPcGgP;s=@Y;KW=UexC$H5K<5MB ztxFAra_IM$?R^4CZt9}g{rLePWPLO5(DbcF@bs55?uyZ&w=A(X(n&|i4W8iO7RN!H zR-LDWEuiA>&XPuKA^-}qZq7?7gWK^4VCAZkISV~1_V{Mn+{g*qK6PEk&}59C zVa-$^fzZ(82DGHoWD(lQ0cMVI%#tp}Rs`p-U_12d z=}D?-U)k4b1ah?dkP_ZmL7zdMNcXOVh^Ho!dziWtif-E!)0Yh?Dpt$8##Ep&&y zp6V2tLciIEED??YByb7jf#^R9t!<}X+}m7S#}M*hQtr;%bB>^To_bWO^xmn1r8LrL z&nkP-x6?IbV1QY1N@E!LYforJiiKHdg1YCsh8(EVvbE4u~Nuayeok(x2jT5_gOwMrw%J%2h*Rs|b`QRTTDdv>YzLcE4;*y%)20=XCm z-ks%qt)2knR~<>-Tb&V&mc?f$o@s)v#<>LHPq%t(k*a5mpF`fRHI?j3gSE(p zP^aFd5p_L1IH%xpN(^JIZS7XXauKNaAB_Z_I&(NhTYiJQ&zZ1-ouMGB*&lju}()*o-s`Mxf#c`DtUwHT98Z_j2vh1 zt5)->GUSEibBd(Jh`}6FqmL&f;%zwGwLyqQ&uINOn8NX zlQ}!RswADzVcIjtBj32Fb5#}GLzThk$Qt6_VtmVGT=Th4H5sbt*NUDQqbS6mnDQ}M`z)_ z+ldAS4;U3dOD+dIdeqR&$^qT-`jJ>VGLEU5sk}qCfKE<8{u5S}0wD<|Gu)c6Y{qa3D*phoDS`<> zAi_u;4m!~)sz9LPRF#!R(ldk9cNG&{NspB9c;Hpp?47batYfA)tn(8nAmARAttSa1 zIrBx2OQ%D_eKXpeF3)~Q=xPrroB(;Id2XO&b?7l#@>67UNf)BKVT|MgJ5wDZVe*5T zsq+8{2bxhK{{Zz+saf75=hD(8S7_TPaD73iiQAIIlh>_P$)i5?tAdv1e9afW(n#V) z$?8d^610GV{@iD!P|v+6VmcmbJ%Z?0w0%oz6!E*a8ShQ`lZH6Ks8pZt0rjQd+o?3v zH4b9Zyo-){d)0{VS}YXcclnPdr~t%{IURYRgNze_Qz~(mjB0Iai_Ln@LEX=;F^|fd zy@?+;8S9=Zs;(C&Kb-)#1a|eM7)5M1Cig9f+mbo_X~iX9nS%lCOikGiy$4@PxU(mg zRoHaK2;fvow4>%yrx|$_!(~sXBezPORD;x(?TQvyQ12=ZIw|Q+x42I;d6$9w9N^NG zX47c`rmtqn<1>T`B2ZZM3(5Zg3Ygp7!g9#O5uB;W{VG+}BM~-!bK9>2)||TPM!;?) z4h}p0Yl+pW-jFx;bk_1Bf)<&$X9LuZ^>kT;T&uA-?5B#XHI(x+pS_Yw{{SkhKBoC0 z2g#g_pXW~1DobkFx+f?^2}31X$z_%1#;3f-}^G z1HLxo`j2X-G+h`y$j5LP;4cK69+eiccDmHi zSG1M~hA%cMV(yA-#ZSRjBN^fewJ@ zQD>2v6y*%Ahj19fHpT8ZO*I436u1KWzt$rBjPF6DU4 zZ)^y4fMYS11ytnxm?N;|PhfeeVNkZsZf@P;DZCeBf`cWTkUzda?VODF$tV$91m4YV zta>2JfZYJdh(Y>=mReKqQiLv~qd%?mN)J@2Lg6jrMDO_ToFZrB{+i zBrBi2fG`MA*kBBU?@oyVNO&>)Sr{6!^;xqXQ#7c%~#pqL0fyY^0T4hb2H6Cmnsg@l=+Eliaq9WJ16+ zYZw`Ba)$?x*FS|iH$wjaD{{xaGJ6lHJduis2v&EInVDUWoT?8Shd_JeV<)z1d7>&O zmN`lR9>4(w!*m3m*zJ!&Su+cTO-S55&{c@qj^f>SN^{8&Ab&qp4JwQJBtht+Kr9&sLSA9K8 zn%t7X;Ty3biA0wWL^gHk@(@TI{nf0m3&KX08Wkeos|0Z-Hg0?#Gs!#;#Pz5R+_!^c zGcxr7jz`wC?E@{GcI8w=3C`b?@^W$S@7lU0TlZ?8RBedJt3o%6OuHKSEfa}kx4SYF z!YexqBeRY- z88DCzIk{q~>Oo1|u%g?HugU9h2yftn~-0^2hP<)eC zWep-`zJe`1*pqJM_WjTo4fB>9oDv2-4PHz8@<6F)2(yZoo-Tl zTW1@Sb{8Zt&ItDzIQOmp067*Fk~A^Aj9HYPMnO0yrgwXG9k{JAP)c0U>SJO_4*vj^ zqYluP%V+LkR|BUcat2R+l-W{AE!rsA)+Rxf&jDAs9Go7XfT*T+2!3EbQ0{k=g8Z|4 z`+JIa_KX(aHN=>KWKo7ZfP+0f$;YmKwaD+$7ZrDF*lefGLa50cjVXP_Ivi~0xfneK zQ1KeabA6)OLp+RHDJ}t!VVuh00lScY@h)!FrE;<=XI9p)(C5t4eiQ`fos-rYYe zr@K_w9`-g8K(nkc3=D*b1dJc38;`lJoI7bbHLv-N+Ah~Mz9oh8v|Tn5R6%Q%Kr@2O z6aoJLeAU>*aN5NL3APwfP%t^%2N^zuoU!#J)?TrAy1$ELyLCQFghVBI`8XYVWr;On zD~~$)kpO7NI4yyVyl48>mFA|EjGNTH>Wdip@IlE0W3b?Ul!ihb@}MBxH)pRMe+sYX ziC@ek2%`aVNya(>>63~W?{?a!hTEL=AI1GEla+NTHnuD@?GllKMh4(dAmf2VH<6hN zu>`9Sa1R64qj!u*@nH5R=Ha>Tj>I3*pmY);jX(utDBPTGBhYsKrjm?a<#SCv%gE8( z9z$-%F^-?)bDD508bi0t$>-(k(?5qw&A7jc*4?EJ-asl2)Z}si{{RY}JDdT#fa|$W z7(C~%a0ee>%B9ll(0dGJ=Zs_A^*@I+(!oIa z*`#ftD&$~w=kxsy2wir8kDH8i>yw{qIY-Yet_;M)N0uMuQp(5(DN6j^anx1Byhpw}yDq4XTQpLZA!spImUfI_cT|?jx4I5Ffm|1x^aL$nDzFi97dj1t1M9z z5uz-6c7cKbBb;QOzNhe}vM1V=ScuV_f?p(s9sd9tnA}4cZJCvWGpvj-GDjzGd;y$) zDu+#{W2zPX+r0~N&jv!QNa|d!?hZ)=o}GH*+MzNlSV$vJEreevVV(Hwf4%N~IPNJL z;YL-KJ^S|`n-~WNAISdz`l<(aYgH~7VltvO>M+ANA6yK3XV$Y+tkCLLE^T#=0@nFt zO~p}oE;$3Ax;GGW-=#4`ma;$Y(sn36cd!N>OOkR)+{BTSjOW)h!!gFv?tWzjfCLVH zVT||BUtgstnt4D-$CZ>NLk}}<3jb{vkeXeAaAji-~GC4gP&>Ukvv+ucR;6vpG!r=~2%oL1c@#OmB z@qA3`6hup^#TjDDk{9{zKAo|eeDhBCAG+4WQ$uW#l#1KTAL^rxZ~`ji_v@VV$E_0S zkLAf~t^zjIkyqqb4a)V_gAkUCr zAHWYmo`m+#pse}j9gDJNBz_mMOHx)8lt%b0?#DPd80nIKER0e%g<{2RQrgpVm0WKn z%7S-oAn<>dIqi*o%o%fVKXS-aWR?IPy?UMoF~Iz346LcC_Fk=<3Qg*HdK*jh5y*djG9p38R1hsPCdwfLnSRyVs;Ygmko49z>^bE4;a8Ry_^}9DDZbSXX`% zW+F%w#-wDXckLde@!q=WW^^X)vCmTnQXXd|$>~7{*0<&G&FoQ^+8dLeM*t2FUWDiJ zs%J;MM|EgfcH=n&VMt3KO50am7Z~!A?d_?lJ{*G5BWT zS1!m-Is$q2sQ&=4FH<0=%bZ|y{zY2FLi$LThn2NPCzQ*8xh=*IYH$+9g`D6XJxQ&3 zG-=jF{oITccBn42`BY`2bNnR#0G_xz{OMqjz?cwyK`eW zB#6$?dH(MtAG=_13COQbjYuf1P8x}}R#zXy59dz|3E{ZxDo?YtgD43cb?->l z&5jqJVO#UW&df~i7~Cl_+#LN)0@h88!C0#OQdN+&Z&#}!bTCj|ca*+EFR~e|Sv}8aXofKmP zWaJvyON&?$QXtO2bGY{%>w>jawKa315bGynDfIaRGyR!~Jh9~W^rT%XR$Tp#L_7nY z{{Wp{d-f;yY;n*G(>~um0P_m|Jt|b|v<@_{xm@^Z-B`4HTa0car{~AxQLlqt)l1yR z883nWErtH~Z_2Iz0BB2`Z`=s}^);`bBj?V2O$w$dZ6Vr+V>W*W-l!%iV~_%H0l~+w zHIs3rUD~q;0PQ^B*GP2|tX18*(#d}W-z@Poi|%??O*}>>KNhIYbm+f_Ly=)34X++? zQ95op8MLPnx{X7kllf!%5l&fQ@RonK@I~0j`e#m zz7!9X4uYwE@O37Wb9eq#jaoeYO<_}%v|~cVtbh=D8k`9f0**6`oK|*8?rFkDQ^Oj@ zSb09Ck*b$NL+u4f5+U>?)XGEP#@Nql%u9kC7v+1^g}Ma%tOwL|u6mexEs?Y#e*^;*^y z`ZGCGxt352g1P!rL{Y!{KU%(RNa8lnJXBIz&ZCqVu87uM%-uKGrtqrtebpY*o&{NG z2~gPW$fk($yneO3YH7Kfj-+T^bHVqeI8&TdzEd1?%{8DsX{wR9xmh2Zf@yr?$2q37 zEWDAy=}jnWRHDguM1o`M?M@S)UMjxYHsYToMa;`TX!hs5G~7FNCZkX@$fvY<)HN9yz`igL0QBKia1$M>rq{rVl`qHe8ntDQxM?80=XjwTNk7|`D zY*nSW_}Q>=nwcfX@QnM^FwF5D58+c4E;p4pK9!X8dhAkHS`sXgunW_kO-jB}jPLE~ zR2@M3r2aI}NTE~aS}}85p?s290Kn&r)RDPUfZ*qf&RJM@snS5q2_KgfN(};cG=5|Z zU08Y$)jC{)r~MvRUdK7bX1kXhG5S#vk&YCR_|`VMyDP4Ss$A?mTQC^oIjuWec^(lk z^5QGX=c)XAS3dJx1qF}Y7{DjUl`liQ_39mBBsoRRt0E5b^oZzgQ3Mx3n_b!OJb zA^zX6=dQ&k`O~3_#bpd{%XY>9$@liIb8}|^{%uvKxRFWZ1@`0`nBiQ#-f(pzAA6MU z{M!`(Zc;mNKgNpllXWW|x%!GKzp`KRkL%t>(%OkGTWoR|{LtG9g(0@(i5cJ?4;bL_ zR`pwDiuOiCh7^f`WiprBv?$s-02?Har{PHyNfZ*!XOdQUf&~Zf=XOJT0gtcdML5wn z2c0BzRzr=$Jr4w&^}y>|CfmPbn?$YLy$!VSql-JGxKhXbk3G2GQyk)Rl5 zbaKS7e!2DPYYA0$Z63}8FQ;CrjPJ2+iHZr5+EWCQppE5>V6X(7;N)bE3Gd0NS8GV} zqJSiA#Yaq^LC_CjSQ^FLmc7j+f;oYMhQMY}6EDR%y zaOXcQX;@r_vjK)qIo({vj;gl~(a1+$^{F-daK-W*aZ@Tyd$u-|DO8Qk80HCk6zVco zMH~j_sXzGbMH;$5SWZN0;S?v#WdxSz&;z#_?Zswkx~}W!&@&I4Ac4^O*2bW1qS51R z=R05Ia1>*A1Q2;Ar#PzRluwYxV7-*xo`kX6%^@XK!CQW%!ii4i&hJy4kN&kscW*75 zBr75ol#)EIHx0mc?}35`p{i5eDp(0^oU!}C#{{t>EPtg{(=VjCzCk8K90fZ`C*O|s zG3RZ|qByEToL4H`)FsTjODG6&E0*KG*Er5Nq6n01^CVrX9$35JoOK)z!`Jo0(HS=+ zs_u%!v}g`-!P-wn9m(s(ItD_c%9W6*^8jC%_X9W{$OzxW`Th zVVwRIPQbg6yn(a07ThoZJ$d8&`&8m7Ot>y1K3btW@qyT6f00$g7Mdf51%}|t0VL<% zfqcJgk|^7BYy5f6dE>P=wuaOw%DqJh^)9-`7Dkd#S)X}MNc6z}06gNU%^)O%;+Z|l zz+fSTg`TXKTs&hYtIMb)r(+sy_i@P?RBmxt6Bz`Bhf3O= zE^W@rlTcSk*q-ri_)Js{t4+6RvB9inl*r#PH1Tk#fOoEiK`%3v;%?55O}>&n&A5hc z^|Wr5?j(#6zlCBz$pqx}`d1fkdO)q+8R5EVP|E2xK2CV|HP2R;E9QL;49=Wt;oFM5 zjpDDq)+C8#bPUBt7a3E)$4qwo>bQXv%BDv0z+gUN!yR}7s`2^N$Rd5d(Q=Il0{c6RL)G{&^-opfA0JjGq9-f1*)~Q`P zi8Q(mYX*^v#u*vrE?!ad09S5LpwE9=rrLRoM-ndVu~K&NfCuwGiL3HH24!<5^$Cpo z=acW(A464l%Q|2sjZ^d zEt#86&;Mjw?InaL4TOz@f&{( z)DOSOU7(_jWM`g9=Rec@D%Ci$d73q0zTJsc*_lolZRzj&pUS06vxfpk3Pu#?f&m8u z`IA__W5pMgvLb^f_9Lp}r}I2g!zSe{*l#V!A^F1gI5ho|4t8`gMxqG~$~2MWvnf9z zUch6&IUQ(@Gc0kpmPePzmJbV#iUxU6gO9CIO;Kg@20&*46C7i)1E*8^WK_{#Fa!w# zaCYOU$3y-_V&NkBm69!QD3VC%9B1X-&;yQ7P+{Hmv! z1a{xKY_fulyQvuW^*Q75sUaq7k)5dz)ChpO0vs}ia1I9t zkH}-+@S#DyP_CBc$i@RIji6;;uUvEW?0+hd2#v9mA%M>%xFBaE>6~?{BJLy~X$4z% z-ci9;3V%G+pkC=#SQqyjf&sMcCmG;(8ROKEQzdO#ao1ohC6|_Qk(@X=IO;zkpT?Z` zJED#lpj69n{mDInJ#)bS0QFM1UCR5wby2q`mB`6FcOxLx6D~n2Fspz$!6b4s^!~Lm zN<-#xznJ_Xg_y96u{%i_+ePB#pdI3VZOuWrAEHY5*m32;>; zb}GSm+QDK$dryI#5Z{$But!VTnDaqLmRtzM4(gH`yLi(Nw^aSMM zo#t-0K^bCHo~?ymc+YJ2_ReXq1g{3<1fgB~i)W1O8TbB%g6*@*cPv?$0071~&;En- z{LWKJl^Hd;Byq;c5l4Iggs45hBN_BRsLxLF$s~r&qmlQ#$`~p!I2jv#J%`itqDP3a zLZqJL9IoM>N$dbT4`0O4jM2ME8;~-oo-vFJ;CBFEaopBTUvouKt%)L%cW@NR!!sW( zi3$%NkD&K7sVsBbtdh$!>~A=Lqyvm#XSm78&r&Kixi+&26-1ILH~@9P`FZ?*3Wh0+ z(QYtoCTuY;w1S|P`T#ig$u%C%`qsE z0dKswRopiGsu{jP?Z?bdJRUjk5X$+&4jppEoRNj&r=T2rpT?c#v&JMSaJ~113I==k z$-^H~eziQdcPUkrv_t12SdtkPokWea$@fSY{8V?xQ`fysZn6EGTcMEcUE7(q?kscE z^Pb#(9r2tTn3r&T?)i5DdiBZZPxKh+QoP8q7u?xY$t3j|;F0T|euwFTRBo(9YrEZ- z)Z4*l7!iXO>?Q_5U^plBKb1w3GKW^&pakCEC`0^NIsAXZpkRo>8Nmww05CirGBJ_u z&OPc+BwG2gn9!rK#@1t=oPV+j!NzmPwP);-^)`(~C1;{16BBgeSk$lHAd)uYoS#pi z>Q6ZA*e)(Vw2++1Y-1&tXUq>go_<`Of1O1eGPS^#5r$w)Ymf;zIO&gb+wrM3A-0v3 zRl=OE*5t7xkUh>h_QgwrO3ir+6K+})0$X;(SiWJ%AL|iDMsv`Uk?cPTY;Nf*Ze(1X zw*IY=$-v{#W7?a!LnuU5C5|^X(oQg2^Uv3{EON%On2b0;Pp}J)r|X{nyj03N=xU_9 ziW|;ye|Sj+h$CoG>7JW^tvHuQ+_tJZl1Uz!+B3#_XSZ602+~1zHpR5QO0)gk^&Edc z{{U4G`E$(#(thltF~}S#Bajc*uN;#}!7Gj}znL_1&clZD+-)Ok2HZ$E9-jHfKz@|u zXILGHLRvBv-aPLCN6gsHMoxO;6-Y*_BW|7~T&%cL@@J_(PBG5_epLJx^9xSFa6x0W zaH{zyIO-2W)9IQWHPEFY(0#f)Sp@T=%u$R_^57nWrx?gTo;uT!<_eNDku0DxHpT@( z-PbwlI%6KboI)nGnmJ31?`9_e5W7HPqu6!MGD*)`mEztVE#W{=Y*ySElsWmB=eZn# z$^MP5=xfMwyok~H&i-i;oCNC3PY2s0+oxXC)HeZF%9U6S0nT&pQbp&yhIUlg`359x zw&2(t_xVTEQzBU|8*EOjOER)=`j7@d%|kxIb!#Z++)ur)Oy|_U^9kpP|9%9&w-Z`O{FR(T6sw>hVr=`I`K#}>j4-+ z8tuvIKb=+kL*;nm9r&o)=LEMKN57|f)l-}5$o8@9X{z>^C3no zIRtZAlHNwAmjn9yQ-$JeU`Nl;A6`3tVyRGTTe5w+dRVgBK9>Ig^2Jp^{vTgodapi# zV9%9|;d%c6AFXuS7Ka7Jr}mBeH`&V(6iRmam^dV!$~tk$Iq8bIdpsyV(5&=^WEk?~ zx8#pcGbHEUy6EBRwSID2Pocp#g{_fUgABI-xapq%0O3?6@RWc#ic~B!jGj92o-3GXc#y3kWO1;k~@ZfV@Nxw4SZvnDL2fw9CT1Ehu9P@zR=M?_2Rc^$o z#q4?fmah@!CMQ0fX^JH3BFEugj4fl9KxG*j$sW~X>^2NWEYWk{t}*Rd)XaG|S1uSw zJ(=dw+f6CtZTgzOZ3UD|y5r1|v(R+KcWI~CMpPw~M{fXb&Uxv{sRf3go@^rb$jLaa zN|~oNmUcQ}g11wMOWS*JRy%bHdFjcawRsv&dX^@;NVM%P7h<++xbSx_K>X@PveP8k zO`Jfh0<5WwW4&ed`d8L1mGw#6;y4qi$mD~bd(%byh448(mEQjVW$D=>C{YmdKpE%j z_|n6n>F}_cI3x2p$I}?aU-q3Oz7c&!Z>i_ac`Reg*ujSZ53O0X`$g2C;gD_4NbOzm z(e&pgMv69L#_pM;`x42JWPRVdy|R1z@x?^5T5V|?7aYCcR&rlsLxz%G-2HL?0P3o3 zHN0RFL$^*(eD$uR~1J5yej^ zZ0%Ji)RUU6zHDSO5$tQekHFT7xiB>kc+4D>yHE2cS?8cSAT zEFDz#F{7H{P%=)05z}`xa zEswLY2alABO0@>>8k&jHs+F8ZKAR@uBS`KS8Ok1iDyuE1iLoubk)LoySzRvnE?O5D zJQ|ieo5&a`GV(LDft_PA`pmlv*_ejXm~CsI4JzckQLsM3kQ-J^$qqT>r5{{tbRNq6PJhUC=t!jo zL|}TF++XeQE0G+y=+irh91@ zAji_8Fb_-`PMs-i!A@&&*m2G?>w`;#Z0^WEN{mA4epdXASdE-;>JRg-dX)KfOxhJM zxe$vlki+matr^a8YRU-kda0>QYk{?a&#hqRW^R^-V?+l)Ppw7dryzIhTL}jB%Pu~K znI*Dg?*5e3YiJIcljMNkD&%*~JINi?{{W3%TS2t**Qe5$_ROk4Y>#@sYks8ic@;dQ zDsnqiCfOt%K<6A);}HXC7ze&-S|hWl;C8BwMz&z!p5|NFjGQ%)=e0udQ@*xuY&s z76w2##%bGtOqJv5Ov>kzf$2{3fKo6pX*l*8Vl;zq3y*pc$vDPo45~&p@l7~W@{?4e zE0$Iw-BTY*o)!vlNh{q=Qi^?~ZZ$hdtV4ANuQiQG%Vui^w?*L%)gKUn`l^7`AFrW?C&lv0g1Kj4GQDpNivg#rm zSE(gQEx;WypTiY3(g|8gT7NQ35w%kQ066E4F^{P=CzkP~khoqW%tJpimg=MqPI7wo z7_J3Bbpwm$5<3|@`Qwf?+Q3HTNyp3q`@{R)xf#e614Z^kA(W#p8%V}Is%gxyz%=-+ zQduq&81pl`arrU<7&+{BUS(u^iSyEjnOf7VB_DPXcINV|b6yE}U0{6%vY_CnfXi2K*G zde?OiX8qK9H8GN^y`*+DtSrp1`N6PHJ!xl=!P?Aft(m)y4alrh*BvT3C3kLm({OH2 zQ=%1Z1ax{jz^Bb)k~>z|oi3b>+eBmcc>v)0^ISc&@+*K1b=ou%?OT}@e6n_p-^6_@ zj}ZqK%-O8!QFL3Wv8478#Tr6xN6QoMAxXgl7YJuTI~cH6ofT1$7zo8|7dE`G;}*Mh~xH zo-!&AvpAMGC5?he7Xc1RoC3!ly#YP&K%{9t)hh^9gDC(E=W}O~^a?ru06Db;wjxy= z-PtpVmQ_H@hC_m?IB#M7e;SoZo67SP7Th;FkPgs2hhfJ`u@m_bv`GpEEFGDL&PeP} zY~<8#7)O};yKs2qk8j6{hOMEjVyqCTYk?WIF_k!1`^5oVWRC5R$eN_lN{NRGrMcJ- z1NjoD=m%d@Ts)DBZ|1&ZWdYxrAB-p&>D%1Yk%xDd zcVCc|R0ja<$54B9`twf79%iG7h;NbN`$#*MK1zjdh~JkO#aEFJ+0jdYR5CLFR|p5@ zPUBCKJb_`=p*R)3;Mot3`-_IV-}m9N=K&pImguPLwBQaAa`V0`S8uuRF;i zh5#O?hdK1%bJwjycWWfBSqczx%;P%%>G%#YQi(F9nHn}IWB@lnI0yO)o+uvX<_MGx z(x~9K%Dj5_;C1z<&eOXKUqojMW|He;tf;vKcq~W@yC?AE{{Wm)kxE(#3uQn%FhAPI zC%^cb+LGbMUDPZA)m2V@LQttadw2CFnGL17#>!>d8A(>h-E4#S9D8*&Ue?=`s7hNI z5<>yY1ucgAo4MrY2aa>nno5RjLYtaBrvT&3NSRjodk>)EtJdNs6Djv zA(Apq_>Sc}hIsl8J&kCsv&63pqlS4>Qe;NLoOA<$lacrjrBH1#VX#Y&FbMq769Ixo zaz;;M!2J7Gs;a)E`!?2ysFzN$IBfjg2fhtXm+~$faW1GbM{Y(xDwb%Xw~(lfNs)*I zgYq7`Mn`U$_B9ZW4<%JYxs?h#?KoD*B!GD&3=hV%=8Ibs$k$O``dOi9j#(5Cm>i6p zpTwGiP2ydfQMP9vHbzH!vm?sy07fYaoWzlhyF&t@zNZ+;+ zl0ET6ACO5A8Dv*wjfqXbsu9UJ!2W-&Xu+x7Eughl+ZyB{Bxk7o1}dy}1>>G#cBE^| zImgZY&^nTTN>mNLBJYw$TOElR!Tji&g!Ew-IBJc!Zyhfkjw5u-F=5e&^zZ5T(v#&f zdB!j|79E0&{-Y=H=Ch-Z?H3|AOSzB$FbL2809&c|sKI6%V`2))lY_$Np~>se*E*(? z(9zA>%+yPuhEY!ZJ? zJ&k77nQ7e*c9pF^(9$z3tcZc}z~^wsIL~bLAB`-Ig@Z!PjB~sA#|L*#GI98E>s8Id zM;Dlp1>TqpLENL95$TdYA}Ycq%=UtBlX8F+1E|j0MqjBNq`0KMvRGmlQa=#UhWC>n2*1{n_A?imG!M?G=Rps2S_jACgBNmPebgvza(nz&vDfer#m>W15Mj0iYzHOnGFhbosJ* zBd7!qZ+euj>}>tmsdZ%S5^jnWVm?+XK;VLKaqI_wTAiBNZGm&TWjS|b;ZS|j2*!BF zAEs)P$OaQ?heq9<+krSZ_U)fed8ru{0M61vu125cHPoC5x2!?1+pv7H z0d6~=*CceLSxTa8k=x2_3=xymZa(KceJV6*H^i*lSTkg(>3%o%6j<(36YV|U6hag2AyIrYaB)M$tZ(IAXCQ@@hj z_dUi4KaaN!oWzkr;hD$>anC>w1~b$SneCkOnp6o48_OfO$=Fwphk{SJ{Dn^{u}W>o zohC>B099&`zb)J+SE35ipSgmJX$v-#%U!w@l-9Ip^l|=BniyNy8ig z9uOfT1axi>Uc8f@aYKuFjBp>`A26_AK+BwaxANoOv*b4Rwk;cY<%NW?vi--xHg@HS zI!K*mVp`cj1w+e~<(IG=Jb^VkoYI0Sac;{v8pX|q_g(iv{e3&n_)q(8e`kfaTnJIWg9@rC5SjV#s)G+KKZ3ms?j69`3C5k-XD-L$YMYp1`ZB6 z?av6%#Kp{{VNe>-bRalW7xV+Pf;O#cV|30F9(ymC$V^i5xdp z?fO-w^P>;C-LR@35gdB=&I#b3U(%t1S$wF(awb>}z(@yPoZx4JpL3By2*uot9#bOa zK4-~h;2a*lgWI(dj^l|tu$5yMmgQoJNe)S382WLX4l+-1S#xQ!q?;|I60phgnU{YU z=Yx)wc*sd@w;>S&Yz6pG4@`H!{Qm$7S0(vU3b^2h%8WyiQ@;`-~9Vk*z~a^-fYsUCh?r(J$V=z&*#w7C9|}R zcX_iuPwvP-xyc|7PEP=zO4&*`_gRCdD{6|u+^Z9xl#_$UPQT8HOlclu48Z-;7y;Lw zqmF7eLm$Z;>>GFSf;Nnur22aP6;4phrM%>2IXMh@?cc9Y%DO4W?^bhE_g2NBac||1 znS*5HDeeCN)~JN=5KBzkx{f&M$NvDTt9_ZuBbJR-+iBe3W8Cw=_caP4$st#iMgdTM zT#yb{{SUy?T7ZXQQVdC%!(W`@Ty45A5J;uwS<+o6N6H#a&iZnsA#A-Tsjr*RIs;~i$aj&v$>|7imGQMDeJi72LN%A zoMxn(;kKt6neFcFH3>deSdQq0SHM_dXsJmxTFCQob=WqaY0fQ(W!`7_D@cJ9TF8ocYNo~E$rMy6S!B5@X z=OIt3?LS=bH>~u18%uVRN%0P=Z*XHVhLvKGIV9w+)dvKUKBlgvE_hgrcR1)mf^Zr# z!=n54{{TLe?=nPjw3h3fj=Wbvt9X0uHxf;6s8~%WmK}i11*HBgDawrX<$xKi+wC5G zH4D#WaJK3f_q)Gz#C8rc4<7ZwILuaYj@aP#tFc_aI4pU=HC#(>z(~o6 zvB4cN*E#Rfp7KEuW>|c!#O>XlKAG#yV=h;vgqvF2ye^w=7z~b;D%?5aZ%+B+uTTE~ zRb;)|?N(MSbI;4i*Yl_!Qjd5&a0xgh;AgF3@XB2c79vZj&~Ia(oN_QhH1(aM1fQ7t zWOeqgaNe;wELP1oY4O=lRhkv~qwGd@Oh@#Ah8d$o+ehQyeTK z@gqrMWi6Rw`)_lV#&&`^2kV+w)tyQz{JduaKTuEd{A#>9e2umhh|4QuWMpTIWOS>^ zqiZ2b!=>MHKm+XLE8q+qnm(@v{n*@Uy!x?&QjrkiL6SKDoQ#a0^Y2qzYRtfIZgPE;?$0&O`QX~9Rdt1iK_m=}@to6Pxt2*v7x@%} zfIv6^XPV@ATb&T{MvD5OXT403xQi=Zn+Q({s#-+4k z_R;Ez8p6%_cq70V`?&mSF{D~;3L?N#Gw+IjnsJ43l6`6GD*=*02aMG6)m=*Fruq>7 z0At%JBoIjl_~fM`%qCw0zp~(N{R07Uo2YKpqd@J9l$9#=z4lm z$D=Ancvd;c$o(q*#yJ7_#!oZ@AQ<1AaCxEDsQQA07egXV8b)Ed2)c8|Y8TMoa0?d$ zt}ATIC>?W*AHtDtWCY}6@Tyg6^cO8Yr#Eq7aT&@k&<1e8)h9EfZ83e`Njz6-w^;`$ z51^+Qt*6hK2*;+{wThH}D2v#sd@SNijEtYBG=wHN#dWi2mNyN!t_VMe(y2}1__qNW z%J)9?tZ`J|kuHqU&iN$Z<8h`uIO;j?Tf;(-avz@HXNp$Rr$7nk*0lP}dNO^KyByer z1Z*kx%|b1mWBIv0*{*@?*f-t5s?x>f@KlmI@mj{c_94?SEE*y6tA16}8uaA!W=@>e=%P(1k%l>|2Hr3}@z2tt z5d)AIR;p2CS)n|}C#@TgT+(A1pkuu|Ah>Slns}M8MtG(jv;w}Axl`yDWPyVy1k>Z# zys^zh0PR2-JXG@OVceh1OynS@7s==c(w!VTzV`#`OXUHdm}0ZMQ?X4ph5~U?0wWn9 zl6`3ga6s!!^BYlPBgPiiPd6epdv0(N?2RuwF-}T$gEye=8+MV&`h*ax!@8dG__D+(8MG@2aaP z01=J8xg(R*l70Ba3kwTdi-;mQTGXrI%B>@iv~4LqLL=j3 zc{s_(pzq$b+U@V63Ik$D(Ek(lQ=>IQp`w5b%4nPrYSibCUaDh@%w0D7GAeJYh% zC1y)ezq_c&8qy6GMN4hG{!od5l0bH$^k$zj(tBW?zLr- z!Y7V5No4ZO(lZ5gB!UzTzm9X0#X)7KA-IBTh{ekNl>su6xh1krMo8&_il|rQ_m5IF z+^PFGqaqmA$4zT!qhT&~GBy~Ta7e5xy$##QdtAsT8(Do#sCAN@sYH3?+~xa?=GTPn#)7Y zZ8XWA_Ba_zmOaIHmk_}PoDkcrsO+tgB7v|2x38(eJv)!a^g3<2-z?8Fw=PQxWZ2eG#4_tm>s5imQ6Ima|*I%G`*|xm;un zt_S-k(t#7MnDZHTY?LX92`<>{`3{}9t!I)2oR?VTF{8?%BLQ7;*Pc!f^6y#ROeR)X zV*tA3`K(Cm#{-a0uRMOS3aRw5oUpQrzUZX!{hE7^v%c5)VMZeu$;oeT{=He!qmAyQ zyM|E!3eFboUVa!+n+ zM-Fv#K4(q1vu4eqigc1l)wX~X?alz{*Wa3_cw@MgrDH5^Nl}0~$2@;i=~1NMp!Gh7 zr6b%2-^eE$dVW97u=Y|?x!H%W9%UD`%GYv*LKNn?%aJ6kz%R9K8Ik7^09lC6FnUy1 zdtr?2PJOFLHwJy2B?-gbdK_KUER1;OvR)Ep$*!9546IJtqSgl+tJbAf%TvR}QBszM za-c=0D`l_-eXCZ_Mr)>QoB>)kngYRcBqJbFo+1(4bg-2tYb^>k`en<w(gVC6*PMSkf}i7`S-%9jEym)1m(WUGvD;3QjT6 zvyb!aD3zJwNQ9(DtQ#O;jxv8*envX(G%BnH^FG1Z^JT9!O#`e)YR9;5h4&eMM3T z#qNtcqJ~iNzG6tsVnEpg1A+eOJ^TI?NTiYp+sg*PDvn6Zqg z$I5yiardx0b4QuI5QSqKU@rx^&j6oZe;Sm8*!GS%BX*G)Orrl?#U~P#OAnG8 zc_jiOM#jiePSy;(XVV0A&T7#RojoL$-9)V>{H_-b*}d>N z`F|cd)DqavdGa8McB*DE!fi~Gob>>JN#~l>V1c=ax6Qwt;maat+cVjjDd?T6VGDdXNGKv{gwMoR4?+o(SIr`y32>HA(GhI1nDa(LQ6 z^~gUiM_kpIVOxNnYbXrl5^w;=Ps6w4P_S!zbxqGA3;<8Qaz8VV^NN=%`ij~W?(Br7 zB@zszidd6?6?pB`a5>|XQj2Dm<7A>jysD9c%*?|9i0Co-RKXclp*we(Spm@$=900OIWBO`fRz=-5vbSIIYemDc`QAKK_ZtMhYq#SXBkL&qjlbU+4 zNv(|8cKx+Pfr7e{%!4~d0pK1u`?$#FrIJRKlqc^HsZyY0u6g_iufM%qyHJ;E1m-|v zF{6e6xE&AFkXt9vRfDI9OSqL%U=_B)*k;Z_8SFFLq0JJh9UB~J%JxQVGL(2xpO*PT zvH4dRJo{kq2fa^g_OG+t3wZ+>N0#UgTLc`F=sizv_^6b*YJa!rX0A{9Zq6jpd*ebY*6^!VF^ADIC=262D$2{lLfm3-g zv9^zYmeEGdy_e-&9tXK6EuMQ1dW3niPF_c1!O1Qc8Q@@#P6l)7ih|~C!DN5kp*xBM zI0L5{>Uwk(l4VJ*n-j((VzWxj8A%MQ*o+_Ma(#15Yny2yo-19gGJL`{I0pbOGEOnU zC-luzy_m*h7zJ7_fDEV^KYJbXf_+Ux4jySHhTkmX(C~JA*Z}d#1XijSS7A-kw7Kto zmMuS*yh0hgh<7A~NgiN1Jf67c8@l6;_^DQ0Mde2fS!^6DbJS-YGs_Y59+gBm5)$&~ zcMM&KQ<0yW9G_G9ae-1xIX6w_xM0omHqo8A`G5z3{IF`AZj9rrANCujxh&Hwws(bJ znU!~ApHd0Oy(}{edvmeh=3+i(#~X>pM_#<+)YY+lZE-GCi53M}VTt7Z-bPaZcfdKo z>5SHW&Ei~NMKCfV@In!s0KYB>Cz43%-m`<0w?}?Ao0ck4PTDIIEV9VVxEV$JtVr9` z@DEZ?r})&3bR7AGqhqrqIXs*IGDlV?pG=QT(-brt)IfF^^iiBhObZi-nf%M>u%okSJZpYIex=B;e=QrAaJO zSxz7=x!D8aHrh9Plh_}d@aMKO7Fo+5C2lTbl?#y;bMlT01KV$G)R4^EgRGO3jBZyL z1@`nT7?43+{JHk1lpjZ-q-3pTwJtB$O z`p~0xOtgwBv#nwxv__mntZ?}!$ya76F3g`y^Uxd!BSWBJlmm4cy_7bhg~o^l2_$4_rcR#(ug*=krD$I7iH5lK{!Zap|7 zp1JhTKU#>S8D(S&+t+N2cHnR@2stUX)E@$4JZq|hC2wr+mb=(FnH(x0Ift?MrV>)rGF)c{331YdK~n} z2kGfrs#a!lC-Xv+yC_?3Mh6`ZPIKG&)o_@MViqc?&hztg@_~+pkKO+O_2Rbn^*fmT zTAH?nCyFUq?O>HBQy5PwV&5?bI2iRKKG^Gu8b|X;c;o?_YRHUJ8Q^0FxFip)UXW}B zS|A&NggL?M(DYH$+@94OO&d1nnEA3CDRN70B;aSJeZ2?cNmOM}|6=zTyH+4aZDqL6zF^(yMO+J>WM@w_v( zp>Nc`S3p220P4Vz?s|GxHfFpstZpPp3ET5_=O2}J6VAnyJONoqA>EJ60nY(?o`=w5 z8O2k)w~uYRyuw#N7Fi@DZfs{6@5v`PJk`<68q!FLm|m%t{3)QOr5fMgPEDH~sT^!o zr6A)hdWFwGIXoVnWS3sCwGvxeY4*QmBn1a^769dU9ORtxJvj8JV4dwP?c;?^aYo@m zUzZ1!05KcANhEsXy<*a7$ z%Z;h&ZGd!(a1@QAIVC{2^a1huRBr~IcnexQ(A;!bW+Bo~U_b?ZvIzAft!K}sOwq)~ zcwuK*GD#(Jje>Xw3ych&rkgdOTgOP|MU0S_rkN*HwD$Ei_Slfm;V5bK@pUi$0X6XbIE69a}pE80@0sb#;8#u=u4OKIwWur(` zFYqrs9Q60^`PN!=IVB!fW?V%aFjiuEVY+wk-1P7H)PH16(W=OWyRaN&@z?5l_v>1k zZh?KPM=Y?UaayP#&n$%yFv%S9Pfm7^=S&E>{*i0&qUViPPyN^$ph zg4ka8!2=v)ob(=V_E&{0?TVP$U{K&L2{;+Z_au|=UQ?@T(!qSk?Glw^(J{w8dFfWv zW}H~LZK)=sr?d?W5{b97u~^8+3J(v*1Y;N=ka9V$*TY&Sou_D{Sh-jwclo1dP{C9j za1T}|Jo;lEwa44|iY-#uL3bd8MHbkuLT)N?jz{q+?!Sm2)!kFXG2M78L>7|?V_1B- zSwSB>U@15wBRr4@91v@co*R;S>WaFtq2e7**HrTrBezNMwmCN7sLpvKw{GK{*DWH< zWN3>vQCWun07YJL`BqMqb2g)JkfVbvvjmDher%nipL3t4E7o0fZw|nZ6j0sVVT`vD zAZ8tj8P48&4&8IsuMtKKt7yrM<*~g!R6s zL~BYKGWn5m516Vk_j$=YQ}>XW037OlMxDjW;p9oZnta> zIU}V%Xt%JvoVK|bX%q(}9P@y3XA}fSA`uf(M*w1sH>r3UR8QgJARBNbm-=TuqOo_rv$J3=lEw7eB zvNIFtE2P4l{rpz3aAq4Fof)B5 zlRSb$Zyto>1HDw9JA)ZVkj{2_j5gzzA9Q-~2NgUC_Br8^_9C!HL2^E)pyZ6^zH5~& zQR-Aua^;$}zXId~FC=1UnoJb)JfcX*7-7#C>M_s{db9RtlHMack|W6$(%Zk_Ir?$m z2CCa!2fb-n#HK-oj~EeTg3a@EAbNV#dj6q0&WjSM&N)HyvFp>`uzb!+DAt`Qq}x|C zj4H7^Nps~ZFpMgU0(SG$fsSx0IIeuLwHqif2jSkRLS<+aNKdIu@t;~*2|=9FPMS)l?2)1` z*zHi~1CTS&p7ikN3$?M1m^~|-d+o9vrl*SihdHWrnLf&u^hnod^2q0r!1fg6akyd1=N1KA6Wg{wttBl|XUyg~Wa8yk8+Ia=GD?En zD((442NhXk+Wc{Y(AA^!qLNEDa(kaaQLax20U-0wHP;zgA3oNiNP;xNzUE~a%8|79 z9{8t4Z@rWTQ=W3|vjF3W%tOgj#fESMEKAk?b9L?-&3UZa) zR>R?UGfuXm7h=CN?q)n3a(ZA6!>`t~W{Et#xXAN10#vW)e>%#v-KE+njhs6-2^;#3 zK>R?fHx~&4Tg3^Q;&6gFT#V(tMoxO?KDCudxl7$W9428Z5!KyxBc8!q%}szJaNk

CGrj$3xe{RIQ4$oGgmg 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 literal 0 HcmV?d00001 diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/closeeye.png b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/closeeye.png new file mode 100755 index 0000000000000000000000000000000000000000..c59a90fb37dd9cea9724d9e1b953767416981efc GIT binary patch literal 45430 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 z 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 B#q$6F literal 0 HcmV?d00001 diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/img2.png b/function/ui_compare_rh/uicompare/entry/src/ohosTest/ets/img2.png new file mode 100755 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 zcmX|G1ymHk)?T_}Vd;>R?p|tHQo6fg38|$UVM!6BLrPFWk?s;$LOP{GmJpBl$qoSA!PUg~PA65-S00{{S`XKG6NkG0RgjEntPrmV+?0|00mu7;+5 zrdpa{2QLqPJ4Y{j7=Mrl{BaxrkdY69+c~(w{Fv-v&aR%aEI&JYSeRTLWm!zbv;?)_ ziZB;fwGbbeL5Q}YLx`J$lp~A09KK8t_z}PZ=4ZzgdeKtgoc+o5EvN9A1K1_<>M?MBqb#!ASf&# zEX?<)!RH(7>1P+j=jqG(58}TVN-$psA6K}atCuI!KTJD&FMmH-78ZejBm)0qc{ESp z|LuG1{QnBUJRg_E=h1#XMWt2%fcoN@l7eAS!Es?Q+;XsRNPhiiE=@AqlLkJzF`O18 zbsbSmKN=aaq8k3NFYZfDWpKmM!coBU0(XnL8R{4=i|wi{!uWYM2je{U{B*K2PVdu&=E zTq*-XsEsJ$u5H4g6DIm2Y!DN`>^v|AqlwuCD;w45K0@eqauiqWf7l&o)+YLHm~|L~ z7$0v5mkobriU!H<@mVJHLlmQqzQ3d6Rh_-|%Yy2li*tHO>_vcnuZ7OR_xkAIuIU&x z-|8Y0wj|6|a6_I(v91y%k_kNw6pnkNdxjqG8!%Vz_d%c_!X+6-;1`GC9_FpjoHev5fEV7RhJ>r=mh-jp$fqbqRJ=obwdgLDVP5+s zy1=_DWG0Y-Jb3t^WXmkr(d9~08k-|#Ly zaNOmT(^9tIb&eb4%CzIT zAm3CUtWSr1t4?h1kk#NBi{U|pJslvME{q|_eS^3En>SOqSxyuN1x;Is@8~m?*>}** znrRFArP!K_52RpX*&JHMR<^lVdm8ypJ}0R(SD(51j;6@ni$6bQ+2XL+R^|NnSp5}(kzvMZ^(@4fD_{QVu$(&K6H|C37TG1Am9Re{<<3gd zh@`>;BqkXMW&p0T6rt|iB$)~CvFe(XC)F9WgAZn*0@t$oZo;!*}r@_`h?KKH&6A@3= zISXoQB+~`op>NP-buiA*^0n{@i{_?MRG)&k)c)k_F+-2Lud!S9pc+i`s74NpBCaGF zXN+pHkubw*msGBTY27BKHv)RRh3;nMg4&$fD_6X9Vt~;_4D+5XPH~#Kn-yjcy!$}1 zigv#FNY>TqMhtIBb@UoF!cE~Q8~;!Pek>SQQwHnHuWKoVBosAiOr}q>!>aE*Krc)V zBUMEcJ5NU0g8}-h6i1zpMY9>m4ne?=U2~`w7K7Q0gB_=p@$5K7p6}thw z-~3dMj?YNX2X$lZ+7ngQ$=s}3mizNN@kE%OtB)?c&i~2L55z8^=yz;xMHLmlY>&Q# zJj?!)M#q_SyfkQh)k?j8IfLtB)ZCp|*vf4_B zos?73yd^h-Ac+;?E4*bpf=o*^3x3-`TVjbY4n6!EN10K6o@fxdyps05Vo3PU)otB} z`3kR+2w7_C#8Z!q`J)p{Vh!+m9-UP!$STp+Hb}}#@#_u^SsUQg<}59< zTvH3%XS4G+6FF^(m6bVF&nSUIXcl;nw{=H$%fgeJ>CgDYiLdpDXr{;-AnG z8dvcrHYVMI&`R6;GWekI@Ir3!uo)oz4^{6q0m^}@f2tM9&=YHNi6-?rh0-{+k@cQm zdp`g#YdQn%MDVg2GR>wZ`n2<0l4)9nx1Wfr&!Dvz=bPwU!h2S?ez6MVc5APE4-xLB zi&W9Q8k2@0w!C53g?iAIQ}~p*3O(@zja6KQ=M3zfW*_6o5SwR-)6VBh~m7{^-=MC-owYH5-u40a}a0liho3QZZ5L{bS_xM1)4}19)zTU$$MY zq3eZML1WC{K%YFd`Be0M-rkO^l?h{kM{$2oK1*A@HVJ57*yhDkUF!2WZ&oA4Y-sK( zCY69%#`mBCi6>6uw(x4gbFaP0+FD*JKJ-q!F1E?vLJ+d35!I5d7@^eU?(CS|C^tmI5?lv@s{{*|1F zFg|OzNpZ0hxljdjaW%45O0MOttRrd(Z?h{HYbB-KFUx&9GfFL3b8NwZ$zNu)WbBD` zYkj$^UB5%3Pj1MDr>S2Ejr9pUcgA!;ZG!@{uAy12)vG=*^9-|dNQBc8&`oxBlU~#y zs!anJX&T?57Jdr^sb>e+V`MVfY>Y0ESg7MG<7W0g&bR-ZYzzZ%2H&Etcp zcd6QeXO1D!5A#zM0lx*GH}`M)2~ZFLE;sP^RSB5wVMNfiZXPd(cmO>j=OSA3`o5r& zna(|^jGXbdN7PK)U8b7^zYtYkkeb%<%F~=OqB~kXMQkq}ii|skh@WSRt>5za;cjP0 zZ~nD%6)wzedqE}BMLt~qKwlvTr33))#uP~xyw#*Eaa|DbMQ_%mG0U8numf8)0DX`r zRoG2bM;#g|p-8gWnwRV5SCW0tLjLO&9Z?K>FImeIxlGUgo0Zk`9Qzhj1eco~7XZy+hXc@YF&ZQ=? zn*^1O56yK^x{y}q`j7}blGCx%dydV!c7)g~tJzmHhV=W~jbWRRR{1<^oDK+1clprm zz$eCy7y9+?{E|YgkW~}}iB#I4XoJ*xr8R?i_Hv$=Cof5bo-Nj~f`-DLebH}&0% zfQj9@WGd4;N~Y?mzQsHJTJq6!Qzl^-vwol(+fMt#Pl=Wh#lI5Vmu@QM0=_r+1wHt` z+8WZ~c2}KQQ+q)~2Ki77QvV&`xb|xVcTms99&cD$Zz4+-^R4kvUBxG8gDk7Y`K*)JZ^2rL(+ZWV~%W(@6 z)0bPArG#BROa_PHs~&WplQ_UIrpd)1N1QGPfv!J(Z9jNT#i%H?CE6|pPZb9hJ1JW4 z^q;ft#!HRNV0YgPojzIYT`8LuET2rUe-J|c!9l4`^*;4WtY@Ew@pL>wkjmMgGfN7 ze}}GtmU0@<_#08~I-Suk=^*9GLW=H4xhsml;vAV{%hy5Eegl@!6qKqbG024%n2HHw zCc@ivW_$@5ZoHP70(7D+(`PvgjW1Pd`wsiuv-aCukMrafwDm)B!xXVy*j2opohhoU zcJz%ADmj>i3`-3-$7nQKBQQuGY;2Qt&+(L~C>vSGFj5{Mlv?T_^dql;{zkpe4R1}R z%XfZyQ}wr*sr>jrKgm*PWLjuVc%6&&`Kbf1SuFpHPN&>W)$GmqC;pIoBC`=4-hPY8 zT*>%I2fP}vGW;R=^!1be?ta2UQd2>alOFFbVl;(SQJ4Jk#)4Z0^wpWEVvY4=vyDk@ zqlModi@iVPMC+{?rm=4(n+<;|lmUO@UKYA>EPTS~AndtK^Wy^%#3<;(dQdk3WaUkRtzSMC9}7x2||CNpF#(3T4C)@ z$~RWs`BNABKX|{cmBt>Q=&gkXl&x!!NK_%5hW0LS)Z4PB>%sV?F-{Wyj#s7W%$F{D zXdK^Fp3wvy+48+GP6F_|^PCRx=ddcTO3sG;B23A49~Qaw31SZ0Rc~`r4qqt%#OGW{ zCA_(LG5^N>yzUn&kAgVmxb=EA8s&tBXC}S1CZ(KoW)(%^JjLTPo^fs`Va;`=YlVPgmB$!yB}<(4ym6OeZ3xAJJ#;)2+B%p3P1Wt+d$eo`vz`T zXfUP2))kBDPoscH;Jc7I3NU<({|@wM$&GaDt`n7WLgIY3IA7A6-_R?z8N3mz|}*i z(zl5ot--Oq@f2-nv{X(ujT2T(k1vY_qh93pK@>H-qc%2Xta)IP0Q%zt%bqYgI`o!wv!0QerB`nCN^1n|@$sVOQ!V0teVG!I z_fD%JvfDeT1cK#-{o6Gv7}& zY0#NWin~kVaf$aufV&;63Hbs|`QVZWpDX6IMk1Hj2G}fiH9e-^6u2zf^FIr^BwD<6zjw63+{yUe8PUFvk8v{sJ=R{d#`O!sz`Q13~< zPT$JS(w=yQfU2`zPCNfSw=&zup@DXc(98afjhv@1w_f!m2Z>rMJ19AB&dB%P#Ls3b z=lK7OILM+SQ&VEd=1GN6o&>YVVtIzoZ%=Z_SdqJN2}E43{bE`>w+A;=y->@^k{oCC z$F*WTY&?34;kfyFV?b*Xb1Pq`Z=%OgwEg)Rz)tx=`f%5#w_INP=x&z5!jI;#;N$ma zhO)+MDm;SxOEVL15; zGq(v2pL3&P1Sl)8P*;G-fd{l1QJsv@e@d8)1PK4w2m*M%V3j-V~L^$i|&C@b?D?9tfwE{B^}Z$k8e5FmQ>v7Xz)sG32g9t}YBt zyR$+*_00RmPx+0mW+vVG4mxd(n$(eQf3-w>JPl2UJpafrPaL5@2j}%{VE-) zBI%6Qpj*dsdH<;g!S!avA~bv^0E+ zfyJbSjPb+j;J52U)<|cIcntQBI2T#>2;tOxu{%D?kML476AErF(qN9hPva5Nkc@BF zC-tLF@3ZFb%Kpj)M<{)x*l|*Ia@ECeXo2E4h2f!aV=cHAhi_E_mfUth(sM4^hJq7B zQsGWqdZUm9S%F`$nQ*_#NcuD`&)Ek%_s{&^78{9Hm ztri&rYLOxgFdG>O@+XHy z9#;|&vBCPXH5Mon^I`jSuR$&~ZWtyB67ujzFSj!51>#C}C17~TffQ{c-!QFQkTQ%! zIR^b1`zHx|*1GU?tbBx23weFLz5H?y_Q%N&t$}k?w+``2A=aotj0;2v$~AL z{scF-cL{wsdrmPvf#a9OHyYLcwQD4Kcm)`LLwMh4WT~p29f7M!iafJSU`IV}QY5Wa z(n44-9oA}?J{a+ah*@31WTs#&J#o1`H98#6IQf;Wv0N_!);f&9g7o-k(lW5rWnDUR zQBFIRG+X=6NnsI@mxnwm;tf5;_Uxg?jZ8m-m0}&6+DA!qam(p$mN5R})yA_7m$q@| zFEd|dpS595rxQr-n#GjI5i-AhnUE>Cr;jpCqSrD~EwK_DqI^7%3#p5)%T_od!t3SOmH9MyXeeGO2(UQL;ax|x?Ncixmeo1=$ z{-);Au{*tfzOG?KQ~K|ak8-HQ?`Pekhe2WM(8s{xv-p>Zmu_6{G!-oE$7$mY`MOJorI=+mMx?H;`pr!;fVYz?5~yXBACruWB`Ph zZM}90_<^OBxIhyZ9BW$`>6JvO;%VFpqVr8|7t3~AmxYak6?`Pp#c;**_SYmi`&z23 z`p6_~ePvH)C6x-G9$hgL=eVALq`-AiamN>!3~Lxw&{H(b{B(7xSRm6<3<{%{yXiH# zos5Rv1L+8fUKJLo%P>4I&$}yG6A>=RD6j?_clxUURPN+~?fax##|z`&{4U^Zk7Pef~EC;6)=%kpLhN z005r+0RO%Mi~ww`tYB6aHZT~>&d$cc3E|>Ab&6An|1=LoOc*LICM+r{A+0DYaqfbY zsHmJe?1GXq91e%dYUm(Tv=vq1D*rtM$j;8rd5Tkzi%U>NQdCmq|MU3Q0pMc;SupQ` zfad^Ad_WK%@ZWm?^yEERfd6v<{`UYfftXoX!EEdtr%pCB@dB8DAP^HXh=qlj`DAz0 z$$bDb9}B;vvH|O9>zm+nIEYGI`cpP3!-h@)o6#TAs_sGY>>Ov#3JM9Imywl&$-~ty zt0Octjjk9YO;Dz2jIEu$gQJtPho_gfk1y6Q`0l-s(6I1`ga?U9$qyglGcvQXb8_?Y zNu_1wt!xcE+RF)=fPn8E+y0y2f3Ob{P4i=;9uzkxOQChqh( zl{hwtVfxdCPIf6(n;!!1L8BaJq~WvYfBpyUeo7qb5Y?Em7L0C0kUCm#>Q z2hang#cOiI*oEeD5rP{ieI3nl-$ho}yX86v_ybxqm}m@;>|dYN3kOmb?MKfCM z@I83z(wuhZg^!NaRNmVV zGcx}431f0by@cftM%B)*`NeF_{R5;JoKIYEx^(NZjv>DuTIwPBV)@%2cl|ET4et6t zZ0yTfeTU)hnIvY-On7`T#M{Ymhqz2jTCeNmTqj76yroGc|cBytMot`SsRnOOQxV+;mz_Pf(;`DDZ`QpmIEqSW z1M;zkg;n$7Z}(gRmu2yk-Zg6-_U>ocxOkV=jSXv|aE+xhp8>&+iWcBQdrlpkea74J zR|CxDrw6L$?#Q*`h7k70_pCT~tLB=DLb_^#*REt-weD&Aj;f2>9!~!%-V`8|)vsOP zIb5SGaV(%#_lO|$4Z2QjsuETDI%{=XZ*#|0;OE`>@_RmZ@&e+|4NILShpt|QKN8`_ zXxaV)beP=etutmm^D}Qw|D(b zbQh~@JsGpNvg#qFkXoX1OZV!nf|on00=vd@&lHP;>K|}OJq+~`{p)w$*u}|@qvmb; zNSbQ^r&LGZPlCq}%46Vk&45mJ^WoR;pNWroFZ~0IKRejV>pV9tBh`@h4`6VtHhPu& zTL;0=YL7=ma}=6KykA2+%w2~zExNusKYO3A z&eF%s-6Z-Gng1o7IOTVM<6!GVfIg{NKU_$ln)%3VjoemntiZ~5#$8oBU;=#tN!vY= zYONb`en;1LaI#4cc{hMwI?_jIQF3DUo*MN7}eHKyi3DD#|9`iQh?{1g}Hgp)O=vE4t ziIwxK=*SC6yPN6^Bg$tMdY{C7YnWjm&2V_Ef8hu)n6R^X>lVM_`fepOQ&9U?#m3iR zXY(WXl=lcd*S(6&qTmCY)4lBT69pYJKW)?a!D28a)lcFK>XfEU(w1>-I+Ss2rx+B0 zuVd?jJpEnedrD9?Equ3nmqJpF#}o(b zZg-_Mw{v_q4n~)S1k);Rwo!!kD35sqO)PrregU7Mw11kWX;3u^7Iajtc?$4Ypv|65jN3mY!u*^l!_Vj}qU;>ua2~?TgVt9x zc@DoL!K?4J3!e<8BDJKz@{dq{xnLNV9g)Eyo?9kFVm)N z4r>TijgJdS%o9eOP*Qu8W++)5r=e376el0s?jjv|xBOy4(Ny9U)4uCmA}v#e5$@F; zW|kjTtcgdMnQc99pvVo_R9PWlb1VBllIlGdz4e2 z9KhkXa`mqDj`J4}#P>iA?xshvb7{@8by)UwIdq3QyhUs%I_rsrGF660s%pQQ_s4P8 z8z1SPD`sDbWyNSr0z+6|hd3LD5)og@Lr^c_#vcRLm+R!pew4;)#-$|dL}DU>O-(bx z1W3lGe&um!V(^J>4)qm9mQTr%v3bliak(Kbxm|dN0Uh#Wg$F!QsIf-N11`9y@sP3z zk;LANG;XR|%fj6H&mr6YSQA2*Oe2% zCc5!!im)hnGAFv`!q?OVz1{|=M1?O?F*m}?IvGtL^_&$9Y8yYl-7gtFUbr#mcUCy8 z-_%EU(b&I1DN^>A&})8|V=w2Rcocv?(!JcIVaKH4!t{+Oyz0>!%I{T9cfb<}$LG%Q z$DpHkwdSry#I(o$cfZ5#+ca=$>P(iXR(Dmtsf1QKw~43Tf*yYH%sP~qkS|*m&PrAY z_G?{Ef->wJ+Qy)W*G9YfCVK+i8t#5kjp<(mM=JMS)M*MXLHFAn8N|d-xFf36v}IcX zC7$@f^;z!Onh*JGdqcAaW8SUlZ+~i(YTU1UMh*=7+-EEz=KA`P@j*cO#pCZxH8HoR zWT#qgyysYYLyIJ7PfTmvJ#(0URYdkxvh7=`HfWT4S`^Q3M%jC%7N%R$ckZYDsJn7? z>*})luWGLx>nO13J!8gNZ*4`h49r7sT{Pw#?Ax6edcoE$DQ$N?@GyiIbVs660N1i$N6NLJX>u?XLM-=$_Rplg$6PDz7eVSIYU%_hDjses(wB-@pya865F!@$0?Z0`xkbW{_Sg_K4_n zl>Y;;^$9?%CJy3e+f#lXsW2rU={aZYop%gf*9tza=S=ubl*^ijDX7>==a7R!!OH;7 zzkWjJ4*(r|6}^Kumi|;u7sxQcvPEOBo%7otKF)|3eMb0hLw%a~;*XnL$Uf7id$ zcOR4Cs>B>{eSW;?RauQFDNW*f0_1X1<~c8{VA|8O^(FdR4M*|;V2pV`8TZ+MpT}9( zlUZ(t-t0lXDvG&!TnB^x9g``=Tn({F**CsyKWt<+@oh>k`?d*r8nMLxcGK`5Kr{bt zz25jW7uYUO=24C8W3qU~V;<{WjSXVV1KQ(om)J_Rw?9^X{Qc84-Jftsa%-c_51nht z{JR8*j;~z99>LzF->|+mlOcCy;Xi;p zG0H|TxgW37ztnK&j#*X9{cglig!gMXOpT88vvyATLB20jq~R(j$%E#BwTaTGsB?(s zS1A^n?ZLMt0~(Xeb_$p4ZjCq!N8QuVeW{rAabmnm?jOK$6t>b3a@+(7v9<0g>!RIrt@3&{*L+Q7`ysl zLhy>iLN68f{6zoVN==-WCA zIz2I!UwJ_LW{UvEv}V$@vCmxAD&gI^>KyI#18bao63~{YMT#9ryM;0`bdlLn0_ZlT zDi6zUS1+!RTh^R|@C(nCdtn9JmAe(0B+FdrI0qtnHU?-FRhF!oVT(%+97ZsY@3%$zz=tnnSjgG0GCiw&xv<|wFc#Ny%u%{dQ?B8iQ5sQ&Qw?yOS6L7ybGBX2pN5U{{enH zJD9kX%^U8|x{)mYK$IS$JUnRmDb6AEsVkCzJ09rUp$H9y3+_`nZtsfVC2q!z8XPW_ z-ZAeYr{@+*94^&lXpN7aFOi)lp-uvy^oeH$Y=Myse;)WT46#RLlJEq-f)zfm^Xt5h zs1RVSRpw37CLBY0XBL7~Z5m~N`<-K3<+9o44gPH-o>wl*O4zaJ0Ezv)`kNLQ-S{|; zswB##hY%1F&#L)VAGTKx>XiOTRYdvoQ7?&D3LavzgAxi;$qKR6jGu&M`0ynu$<|-x z?jH(&ZedzZ2Z$GwFA2`oY)Svc8i|e$o|P^4;#Bg}`Q3-Jgl~$NA}KvWq5$ZKY;VY%dAlm^s#z%(MX&6(@grE+C>bq{*a|^R(H2( z$g1zfgz+-##|BWep~1>{9LY@)#e7e!M=e)s@u=#vY%}~eT!zJ6DZET~>}HnwjiEB7 zZtz-g_f|s0XTHl z+*>SB2C1Z{3BdL0Vn{%#%In9B?miu3zzoSvDO-TXO1bd0b@DKhIOoYOEh!J0rRY{`Q=Y4_O*V(|i39@=x zcjxI74OP~)QmxjhIO8YP1pe*I5p{q*KN#Psq`N_sk0?>kXt;yUpMhKttINP&3eK{go1t?w>e3si6|Pp@?yFPq{P1QIBnPMyjYC^^ybd z?@wxGeLOr(F-E>_Ygfs{K)aT^Z664bxcGm7@VC~7TIpF8Ds-xb{vp02B00t!Fau z(ml)ke*oQtZ8c<+Vb{nVq7?kyx3o>Y>k-ic!&hUpi+lZEsw#irH@|IpDdzT3P7aHw9}{f?>pQ6rjJtFhU~1Q0s$sAs^NglPDn zf{W0O65N_(M(1sX7o^BUQA+z273X-wu&0VKrpBNaejV_l$%iSH^MVx;T@if0N1L=> zM%(6FE-2O zQ;YA_rcX7B@{y4>1twE0AFg~`*AS}CcLzw%*OyjU+t{bkU-i=bj&JrX*1nlLbd0rhUX~%0Fvr*8&Jl`@#hn&0ONJ*Y>Qd(P`*r4u&h%a zk3R0G2C{(rHvPaP$2f)c8WHfTHoD3rNcSbi(^t1-q&$*tNGih%_=5b#3f*^9TD zN(Kps0gE6RW*#z zOJz=u6`#``7?-5~nj6Semr0)fsWwcle);O0MT};RTzkP*nVjDAfytT!=c_GJ*{6>~ zVPCP#{;q3+{aB4%))#eZK54vVsTjMISFG24`|20y94?jiK8LvLDHkpZ`q$xx`D`Ky zk;(3+9ySx~0kU%7LEBA#AK$&Ii?d0-lm5L+0MV$?$?@165jDPU!9DHB(3%=+mmCEQ zqO#2ky1oy{m$udDRi@gv#+5{K@2+>)?o5Kyl%(h5hSAj@%hQK-+pAZ0Hv8|lvpzx- z@aX}jojOr|Z2%rIm|@|Lb7TJbVf7I1@ZB2g0pYq?2GMlG>9gPrJ>jVA+{-M*XLz%> zJBq*o4e=&sx)On9#qNIhCv7WFX5I*E;SlbdUG7>lHh)W&L!Fu zNvC%%<#`>vq~$?{`p{M%hzX<+K!9zt<(j#to4N8Ij4j;J7+G#*7Ajj|;_0OXoe=qPJ74N2jW?j<>>qN1*>=&UE7K?_9(3)%9evd7(^=D+q)wH zx(m(dL2KV}#aY=2)WOSCGkk3FcXNwD9$h!_Jb}~loO3qOS#zDGXKdtE#LMqsRpeE8 ze${xQz7^2&EUW4Ldei00;}j!qo$t(;NBbu+lrX?GVPpguLG!dy-a@4*Y?;eP(pNZ& zokM{wAOxtWgxENIo_$!)z-HzUZ%BxOO&W*9#&xom$|1GvMjqHKHpBx#4Px@GJ??R= zh0h}FauQAZ6t)<)mZwbyL?eh<2bn<7ZSmt4GFJy=Xu9z%GdH3HoFvOs#3QI9&;LG^ zEayRNe8wCXE~0fv4;A~SCbKT?>n;?&p?|9FDS1appK81Z$JC!ufdyGc#JQ$Mq&wPv z28$~7D(_N;!MC{O&1n2=-5l6BzUyId9KA^awyJyc>dQ*)KX^B|XcV@C;I?BfZ{*Rs zf;r{UymTL`FLzr)I98R{F}0-XRopN_3?_-9=NuI5R$b+ejFOk$JH_`71bu?Em>;NO zVtU_t$WkuXZp5qe-JBD+R~gWAWl(=$WgQFDCeWMSUwyMIw(|9*bq$b~E3rF2k=C~` z!X+V8>7K^rj#2}8iW@sg&>)=o?(Zyi8P8a3g0$#C^4_t8YUcLd!dgW>YqOr*zp59KO}cY}7DKTCq9YC3HUQ z2Q~i#T+c3!n8^qp(bG%eREA1PMA7;*D53o9L*HB-RNgds7o5?~nRttx)O&E6zFqnd z6XBV>MnA$U2$@#4nhGO!D+SIqO3)OS7K|J8+GS7J07kMw9IH=yd7qW8HO58h>DAEC zgRSICw`qR%X^tRIXH-B$Y zYYHta81r{9uZ8Z~y!kfi(Kq|EGiRpQ>hWL8-?rbrIN!e!*1tS5a4ewxLAp4?Q)na8 z&WYn6;Dcl5?f`{&uF2d>uO+AwEsSKY@~W)C-EN6&i^166&VUDv8u;V&9yt^bz5E9V zdlUP7S51CeQ;~zBreABBpXcV>&qw&7JjQB+icI8#@?%%J6d_8x& zIG_;D^Xiw9kawGH^z84DZLuyI1GP>P1n3hB)lN*h)zw>q*Cw;~L_bBzr@2Vw1Qx7% zqrM&%MQ8J2CK|a)nDIg=m8{J+W&^$5 zSXBc-ZJOOf6&>I5a;lOT$&6;Lf6CMp8Rg5{n3d%ndsdebN%O|Dvf|A~^%KjN2sFdUQL$Wc%5qz~*C{NS@EoznD$EDQ)O+yP6jX+|}0GJsB^5`C26dLt7j(Y~h#q z{(MOHNsnmrwQkbK=D)RJ-TeJB(A_c6KY$YU=W2zD<(G@6JcRgI^eW`jw{QG)Qf~g` zx)2>RZ~gi;G>`9ll%GzvI{BF%R;~8K?Ry|z<1B^aHNAfT0aQTmR28rFH_q_Ceign{ z?E0wo`p7jyi4vVcfAF6Gy-XW52G?<&Ho}EbnQ?s@Grt ztZf&xP`HEQW`PrS=Ne7ViL{(9DyMVHNfX;)D)Jf9&380=%hE0{r2k#Vr!136VwrO|B-_XG<9wmQq3S0hj1I4aw|A-$|es9ZSv9;Vvvw0Ei%B|ejB*E># zybEu8xmOV|Kas_q3}?%mO{=E#D3=0(_8&m~lrIlA@aD_JMyFlD@quOR5oJi(X49KF z{S(>v9IqsEKpucImTh>ciqWe@7kLX|6Jg5@#k#yrZ+6?SNBSa9fnl^v2fM~dIfN6ONcz?Iz zAQq=z^3$ACyDO3u7$O>Luvb2?4pWJelZ##os5Na2g-^%{l1*xrQe(!mMt@@rg@$W| z;OoKx6K+EA{Czl|Dc(&Hhm10o)qVFwR%1h-hZ7cj@&deAM|-j32pfJAL|OBVE6-cgReKfb@*djmwdCWftHpQ z)0^vqpelB7TUw$W^e^j5+k`JwdiQTxrK$E=qNDXOMU6W5fStXXZih4&SXNEQBel{m zKwnh&!a1AY2v(A7=6IRx2qsRvIOPnm^N+CV3XL>42z1leksBuK>3g*F3Fy3$x%Qq{ zAmVWBuFWPy{B2XyEkJWh?CoKq{_%xzwd$aY>hgST3Qg7WM=!jRo1I^b8u2sRnyQXI z)X@DKVPklnf1!@YCZ-m>V45jQEw&8U`v7}I^B#yHZMWXyzG@wj{c!r^liEQs!TD+w9RL;%MI{(YHP1- zjTb7VypzTqPOiZ?RrhilJoZVmFt@wwJ6Tp`FJ@3HrFQYbSUl0vFD&I%jlk_ngmfSl z$)fd8zp`BmOv{PYq_qH?Bc29iOIy83UNrn>fC=|f5(@dlXSMW7*vLlBB7&4A)<@EZ z8NSlrjIh6*mFRUv`?94!&Y~&hd<*cPLz*d~7=1ry+wG22;XTn&;VYHW%FCc{;|)P? zu06hb&9u%l`_%6K4O1fy94SS=;PKcO%EcWV)tmnSQyegwm+7gNR4e(K{@@SM zLUj}H>_!bgMkoW9wvz;PrE|Xh_J~57wffr;T~TtYNrOppj~dcj@SW(Or}67bIrVuAzu|G7ujn z?`6Dov$u3&;ZGr_5_1IpQ8|F96y?kPVDZMz)B2ejZa@B)jJ7G?3!yB!Yq&|9{6|7I zkTEAouLV(jLgXbQmulsl2Gx7Qqq)NRF25c(9^y?D3-54NR%%pt&4a*X_@Jd3pM8}n z`_P5raIq=^}DfHQmGrxj@?I#pS_?w=c8%dTp_+~}`Rd9l+e zUb0ly38`MRWX-Vu%+e2!hI_eCI`_*Zh!LsQwvs3O8%A}@f|*v&PQn6q=gQa2CBzvW zi7zziJgk-SI)0a(%ikNKo?61msPevX3OL>bjr9j+nzqn<;A|1i5z(ewR!LAJ>^L0O$19q3yRGzeJ9@3kSH6X#tjwzDq zNp``+T>-CN6X$xFuG=6e+HYgRC{#^*n6hr9zZ9=z$sB1V{~iI*q<4yEi(|XjY&t?L z{d5~ARM8z;p_Pz)s*Jgu4yC@&jW++ORuvx#u7m(Kvq0vecmHC)lmi>ZvkGp|_sDZu zCvm}Q={f**d?AVjhWHNa5tVa)2KU|=!xEB68mF2_6y`8Q8`GyL$QK>uDeb>i~sM5juxl*L)0kCqI*%t{> z*@z^AWwWau7pI@{)AD2I$4MzqMp9Hpc+Xt<=*Ozj$@J7S;TB)-ror(RjgrsJ&9i3V zgzD2~RNwaR!>y{?RL4fGc=) z(I+EftXC|!Q;AP-Q!PrTJD`;M3^tx72ora=SIFi(b72f1S#5Xx{OVg z-tUOzdu<5*DfYQSDDp~N)DMln^58r<#N!PZ|wWzk(NnI+TStgBbidHm(-G!cvs$^)(_E!C7FaH>TbWlEQT!paPRzOjb-B@ zySVDDz}iC7gE(tbh3Dt|aU(_9*2_adynp7}Ic)8h&!Y*A!-d-?XECVeZFj~E@D!?g zeLB%(-a5zQ2>H6qqL=Z-w2g%6ny439TidtT#_)xoNJyn}Ro zCE`-aGEuAR<^xv}-WsDaJ>nbQU4xw> zS(_fi_nSwb(%$!ni$>rd5bVf>MeLkf31(s0Ned^W-QDqq0%ue*WbYBHr6CMKb~ACl z?N8|Q++Rxhe2DQ~9*;e5%2Akr>V#4zqKr)p+}l}=Eic`iGJV_Ag7F~M&VCK30BRK zppZ9E4--mqfc>gclrensdSnFNs7EfS5x`m*0IpT%m_opl6~A=ZR(j9p43X0uChGcmF znN06d)EZ&R9P;g4!<$85;&fE?Sq)Aw1y3a40in!RDzJA$aU@o~5H2CAy0);{a;?O9 zuB-2g^qiC7t^Y}D-naDK=qi(yE@F|bXQA~MwcH-&IS3&9JH6t`rLYuTz=~l>D;qTQYIUmHw z#KG3%WN+@0mu`pnfDscxS;qLI6$@74{>xgMbl%eLMDW`M~i z61O{@*mR;Rvd;TZOu3o}ANX#(1}-dDj#psqrTKbWHZs5cteQ{!=$l?;@rI8e{(j8K zzw+RWHVUkS<>ByHfD+^G6}6Y($xoYw##&Z ziD!FP*q8XbnTuCYG!KQ&Lp-5~QIKjFR(bPOTanzacM@4?k2+y+{j z(mb%x!s@VEn^cE%8G+=FU)z4@SDY4P=EW85)(CGb*ik@z8lA9dpsnl zv`D>{(^$f5jEH!z8gfe~CckvA(Jm<_N$p|m%6$V)pt6)zhFg#Ywhui(qIYZV%;Q5gJ z^5I!q)cPEO=JOR^Xa%ASKqg09h>VU9tieghnP0-LqUBvE{uIt+tibX?L1F;GOcz$u zySt%BHYv7fEHy-&%e~lS^bSW5vJkW;}pBm0z{-=oD{j{!frwV_=}cF|>E28Nr*8hwg8S+_U4jiXygC|o<$+Po?u zA~1?e3dugd2;Z7ydu>e;aI*0}#<_0Lc4kZ#$HP;^#mv{gV!c35aDNPFtz?}S zGa<_uMPXq8a`3Mhd2iGqy|ZLy@929A=K%Q|9%%!n>_J9tnG51pVbAap!nZFf07ZID z&=2C}$FV|29OXUk_3#$m#-&v35TasPhs!E)Qkg0#O=mw^F>*Wkk43l-={9RD^r-4Y zXgbg%6J7#d$|8CD%A~mldYF=KUqZ8LA-0gK-oA%cpzi3q87T8mO-3JU3q`evJ_JUM;pE6!+8RdHYOSa&XXlBLMDxfWGpfuYZ< zp_eG>7S>Tda$1OeUN42??+(>rs;^z{LHcM z@d)8MkwS5Kt0~rC^thm~5h*0fnB~)-H&K3d%xH^sAL8#Sfi~a)h7Ayp05^d(=8`Fo zLTv&nc!H5&@Sy|V z+!Dh0D3YUXAC(Z$&B9DJbno?evzzGg^cq1_=B=^-hVkwUMuWLA!MysT2`GIe?g?+(>5I5m%`TMH_eS*6QdA^H2q*R617%r?mT@b;w#hC!KMK7GmBkk8L8`Q;((Z3ft#0+v2qB# z%a#b;CjKL8dP4u&p{@FhgP{4Mv(04O<)s7jXn~;a$v#m6pFT+9=Q!ye+XySiW$vIz zoD=6VF6h}P(L!D(XdR&aP9nPLMR#3A^k~7=`?cbe8=NYZ&N6L$N7c5#zx0mXXL)X< zuY=Ck@D5ilZyN2)miId7MMB9Y?^FOs+?69^ZO^BTAvi^jWeJZH zg_>%t!sTl}`>i`qShG5kWj_0NCr2qypYyMtBdm`j$B=rte(eDtIJJ+4=9h-`b>zt% zU$kx-5`LUTK+VQ5*$ed3=OlBVyfZRiMwFzR$*Q$V{T#=;RmM@7I5DwgYa2O8-B~^> zQnrT}RpNw6uD$9HX0fY+oR~W7f!L~k^lG|Ys`QL4x+4hI`KZd{!X?3jf*)$g-*b>D6d8Y7la(Lk)MC?SQgN9U*9Z<_E2}e+U9t1vk(30TUWa*y78YOPtk&S* z1{~cgLJ#%0)^l>tFP(3gYAePNS&Y@XBt3@7r83+kUFAJ7Gx+W4tD4gL( z4C$==(enEoeCGOWntWP+hY$3w+iq#qOO4>>=OMD0zeg>z94@P?F(JkN0npyF$k{b# zM@2+~&O7-4V<@s@=}9bN?`VZ>x9msxTwdZ*PQmZd;ab2YxX(nUObP?g=t=V?M)?9` zI8=;f;lYz5pqEz%C_lHZ(%S)Ax{Q)TBCPdSnbdeJ^qT}djuRPi$cW4x&kZbB9?GA6 z2eNwcVox-J(b+$LBF`#`N9e^py&PL>Y&McG_#;ZkkDsHEFTtMV#`J{bB~+n&P{OZy zcNac_Lvx)0&c@9gBS|C6*+*48%liI&8MqD1tF8tR=YO64R12U7qsifuF&r1&pr6_=s!Hhu!a^^(Ted62mfM`j&o&{R zQF6R9DDrHQAkKWb8ErNKx~}quXrGTs>XAY|@1LRDY%)vC6^X!mZ7P?bDd+9yq|4wP zpXaiK(}`PYSdOHX?c!wr%e~I3-c)aRTXE~4~AS;rV5F2`n-d8mESw* zNvIDdf$qO=c7B31k_jnx_9Lnm`ZQU5g(itb(m8MHPXy^u9h4q$`c56txs8R6DD`z( z38-jiU&IP6HxvT!ft(TBF<&0fwtEB;lC6YvxE|U)c0A*KVVSKxYz<>n@#Mh}N_I2W zZ}41Ko76%0f)9SN%E@_D@g!XgZU!oqZ~|h;SGq+DcRm$my{Nd6`e$vtOu`?br?h#C zEvL)fQe*$5y^3&Uw&P}>L=mi7J?6}};5BsT!;X#bw=5;YGc=_6V>sB9gd_ladD+ zLyB)>IkSJkrSk;~VcQ~z{UrB&0rKS4EHbg|&6YSN$I9ZqIf<3& zQiM2J3+3sTORfA5c5Va=l}(0F0=$?T7JT0M4f{xVXn(pUFXr@M!8s)_dIb;?G81_i zeJ`;5a*u6aJHszD;X>G zPc7M$3%PM?#}RhkxwrxCvErAPyRz(SF#Ra9DD{*x}mF~7!9lzhnw8K)+h6r9pJ zPp1{UJJphakBtwGqpIaILTedk4HYeygY(`huc=JS*@6a zG!tjf=dFedd-L#5?tP)lrfpw~$?(_s`9S6VrLsP?%c0y6bp8DrGb8=VYFezkv9ltR z{ITti#uDLlj|=P^C@~9p7vNKKZ5X5k6Q2<#RMo=9g5b0Q2+ft>_5J(|KN!W3 z<>M$hM^FCOs4tvAi9kyoaFg~24wyUTD=s#&c+Ga<^-1fdyWY5R2jGY5-o}>e0NOma z^!y){GtAk13qDI4y5E-Zb<;MBuBhMr_J7`4z;X%S2MG@6O+Y2$2@_R!G=?lp(BqJ= z4*m|JAHNb=EyAaarTV@6TZ91IS@r{=hUzajOw(6P=1oy7^V5V#ntLX=2_%-VW%QM+wVx6s$9qZ1QFwQcys93{<*^7UbSzT_O*_9Z!je3a(vU zQs7jo{tZ7NrtOWSeGUGk{1$!`he;BwV$KsB7SG!FB3?E^Z__tOze)ygg>n!*oD{+7TU&^x9cKz*Zs6ddyE_yim>yh4$wFVoxgb!p_^3b5|kLA|2-0~ zzab8COBflY_!@p6_>~LE_Uy;4$H*t9yQFWQ$ld*}y&oAw3!zUu)`o;Dj` zGQdG1As(jUH{ePTPMlL1wq7&Woq?+Qh_{}Vf*YKp`@4DqEh(>!eeUR+ix0?SPnSiNlc`Z=JvZhU#zu-#F$s(lks z^<;~8+K6Nqu`z!x6V8cSLE-)@E*b6^1LkriMwEjm3Ss3-SvJ6VeAs>kaFUUrc7X-5 z8h}Fv+W=4%r-z$h6;NkiP@oJ68EF+>u`IUwKukVU}Qo=-h)XF63<_!;X zK;g*&*K_8Myt_*tKnx33fKWOy&cJ1z?|s)5vEiT8wFc~5EFCMy}--63sav6Z5l_y*JC#6-#s|ZAlCGhH>xx74G zUt^~>n2$@fF3+e05biDIy*SgAdK5vHDpcasdlNfnK9Sak`TS+GJlYA?NCKt-{ z=0hgPEn@n$0U2!)kz(DIx{Yzr57V|;D}{Eycb6VDYjB5gfX%03luh-hPlg0{Z<6}H z%53o0PFDH1-Y24WK0R-`<>D!1q?y5k5aWry1=q%jUMT^6;OT0TY!NrybQSLwQ_$RK zH;1VO-9NW6siLGjY+yx&aRU)k8zgL6)`VlcZa~DCM)@E?Tz~zRAf}B$vl($BOBV)K zl5O&T{7DTSlE*SP^u0;VitTp$3G4*qs>d)U97QK6-jeR_b?RT8J zVA>1Vawd5f)xE>ELM8q@>`wZn`)%lXL&|=9w^+DXblzM=ShkR}{JiaE-AApc%c1#Z z_%jmG9_a_T=~tqqFt#=nh$(-`Acsp%L&F`Zx?-MHs0>Ajb>G_+eCDHJ>$gau)N*VE zPWni5C%-kQG%m~;=J;^lKe#!f!T`+d_Q}jMpUW}bg@Cc-BG9p>{X!L}cHEkU_#8>&klv#eyVy66ksIis zFe2^N5SctuTs;wTLzef)gGu<7xw@V+s}BYH*`*NBpq%;^ui)&T zeO1Jqn4Tarxh4CKzDv<-y5T(;U$Vf-%`@*rv+#7k3VqMG??LoUVcBn%S$aP4<`@co z@?|)}&P)G)06am%z6tADip3k|>*-cxk$A^kdew3zq7h-P6m$Zw$j&X{NWhSVCkv7D z9_RUf6_XAcRmyJff^azXtr@q-e|^0i^2?q_)b`@BthGpSAeQP-`$$lB;6BlkI{yHL z5S^+@%7NTr*yrUQ+;df@ZGft|ZgL49=l=k&QAp0Cs;*9Ot^F#LF0>uT$cN7=*;fY* zyyG98K_Z1_8@V5?PA-g)OXjL?&O_toKj#%qpC{V2f_+58KJ-%gsHz8+r1v>I{BRsU9+bKN0A`ad=||1! zKn71?MqAR4nva{-feZ6d^HOB@rO5vEAPgT~DMklcZb$d1%>XN-P=cSWLc#JxMzVAP?pO?2+PJBn%d0lB5(nVMYwbij6LK9rQW;)@7e)NY%(6zVh0 z8v$619!E5U`c%>`;qO(=T6Yk+q{#efD4+)dDJaDQ(t!mi6rfa!p0t|*s-~q2iaJw( zC+Skyz*DI}qNHMCkkZm0)`SC3Ja?oboO4YzLKtbe&lK~IN@2&Z=S(anIqOUHq`?%Q z=M=;*Po*Y69^YC6QNipe5V**sE1vWm=lU8@IpEL&72AxSDGMIsk6Ka*;8I}spakE~ z0+9V_*yEaM9PvO2o_VDPlLzpmJep%34Jh`e0(*6!9QLBXOb&irQS;}h?MOgcPvOA{c%xV zUS(NFT=fUAtobHjGINf`xgRxMWLmU#F1*8W%WemtJ*a?2XOc`tSmSO7>MJkJI3ypT zsbZhYVA(Z(%F96JG~}H1&O39~p%Rntj+I_Zg370{^%WXE(Z}Ue8hQ<~(=)3Oy#+Cy z9O2ZG58edRM1_tpNk7h`opwIajC)f_Ucqw7n1U8Vka{+Mod!2$E{b0m2Oj+@J2Y7? z1a7;*2Z7$SFtI3&HjEFOgU4P8tZK`V*=|}_L^D`RGw%$TRl^oI861BsRhPInumv9| zRS3IqbKIPE=N|c}9^l8oatR+PE!&^#-m~SO409`$BciuC_as(vgz8yKWDTXUGT$;s zf<&45K|TFX)~kt$&m3nb0;(6xWmMy9XC9`ej&lMs_C32-TBf6_Mt39{~F6>He)YEvs^x#0Gr*@eqD5+Gx+D&X`{_m90%nQ%iAa(d>bIe(p-lhhg` zg{~WB^&D}NjQ%xoN+?fKsOw5bFnxLArZEMS2$h%mAYSG*hwye1&&AqzGZEXkSh2dF_GEYOYDHh^+}_lzb*V>8|`> zR7&3|6r+L9UvW;_fb5K8sr9CibAgI(dBrM%dQ%Z1xW*W9S`b>~a+S z@9^TOIWBifNXW?JtwazUjVSK-3zJ69(ryp4kH4H_+cg?DmviQVk_A8V&<=j1 zy;--n^MeUp(N%gaSr)M@L@7{N05UM$la9l+5~&rS(lY0nrgB-B`ef#-la94J85C1EqO`FmQTU2ZX}BVQNcOIB$5LXA-t?I?0Jt=B z>q)we)Bw3*-i^&hXx%^yy#6$AG@14kWO`5n?=+juCP$&A+&fSL?=)_2Ptu#X`cb*P zC;@XuedyeA(vxuXphENONzbhtmW;2hF@{gACp5SnjTk<(0H2K%Z9k10Ti$^N4}K`e zy%=xCj2_~E3}d;Yk6KQBDB^$@<@Kcnb4=sfjwuY7Nrl_N9`vC48iOM}X?G?#1RrBc zz*t}$eBYR;%uGMp9@NEudXPEnY3c(oI~q(>!d`#Imoc|g$GVzMO>_j25X~Hll*A7y zAo@2H(vF{bPCaQUCJiyH1NGtkeQGX*gV)lg1R6$7;B(06X{`mh9XJ|c%A7X_mo-30 z8{e91MyH%$`ie}_h9Zy*D9g{@9-^8EJt}ZP=x}L|7$-k;`i}I|?gVt4`caan57*Y0 zH9#EmNrHP(MInya$5Baz^)%3N(w80o0G%yBI`sZ@XV*ETB+=HG3rmqr#yjGcfES7> zGDm7NKn}@A$jsEu~ zza}Jp0;(_=rGGis&yinjtk{r_8HO{@bMp-SYC@5S7C_{;@hQN?LeV4-RzZ(SQy4LZ zewn~M>P3}GJb5d-<{w&wucxI|({&4r*O$)0UZWKXPUh03?%caeib_#hT^!

^=y6%9$?R7v zAhfi5i-ba~6#e6lg0*j^jbqrj01kw7$7*m>Z*Q|IPXv;GN`bJ^lH?URI3Bp`T$7)) zo!-dND=Qg}M&>ZF@<9chAJlaAsSM>v0Of$e;|938=x8<(ZV#Ffl2zko z?mu2?MkirmkCfox_4oYhgtG3FIpfuPQ?A+Lz+#|a94V(LUQ1B8ua+fT?I0X8AAXfx z#4Mxtjk_5vM|zCN8F_4HJYuS|9zj2?bixdak`&sxR#T3mm|xSSGbgE|JOi5A-N_u! zfsQaKySKIp!0$~GGPdBycdzuMI0WMurjQbkZj{~GKh~oS+MIbA=xDGKf=4^4UR~eg z-k}-JGfH!gXs{9oQZPq7GHEhFdEG z0t1S6X}F`BU^pH+)RBd9LpD7PLz9eWig@IE(ga#)%AJ`~0mVK@KF;eNcRK-$ae{h} zdXCvjOrh5d!+^`44@$7xWQlPn%!ltB;Qb9`+f5?URsetnW;>JkdmM_D_JkyloZ}>t za0uy9B#dJ)vVc_W!RP+~)kCs?rzDftkMo+FHpkGKF&tndV3X>n1p4-<5+!LIy5UF6 zK>q+5e&h@S{J}a8dULdGZgz&)TdsJ{e_EYa%r_{@6CvM>gURC^MsZL%1m}QHI2B^# zl8e2GY~*`?_3Eo*o;elK4Txgr2yxfH6%jnrvE%yF39CXLmrNjtV?3Vbq6Y$$ zAI^af=x{lwh6j#M%7q?O5EQ z*`*s#S_DjKL`-@Lmn1Zpn+Ib}Dm#jqV;BRF-n51{QOMm;sw zrP@1lNsnrGLKg$q^rZkCoPqT;-;>^qE_fz@975wcrhLDRF40I=-kJe;q~q3&rju#( z6vQ8ir3CuZc^&gh&!M0PZa%cTiT)~P3G8WhpF=3^#E}NuD*For48Isunfo~j{cOn?N2PPfa(vuG{#3L*&c`d zY1{_mJ@}->2ZM$fZ+bd<(*bCtqn}Dc4ASS;lQePKfEVdTX{R2PWO~p7gFh+*nWsYxMOOUC$qa7$zcBL~#6>^pVGt!K@Bj)>5-UxH*JDHbTF4Z0rcS5>d5H7i z*KUS~lS`j!8IG?bjxz zM2au~!n1O&Hw^LV_uupanv8t@@q0Dcy*8(B_GeVnAxW9rEN77YoPP?Ca0_sI{vD}@ zRFC(s{h10Ys48Ap*%<@wuXbX2^dFuoh6^ZY!veo|8&hdLhBybOOyk!y#le|!R2K(0 zC#HEMw;*S^>(dl+CI0{p!<81>RAq>RWoLz7ENG7y+{Ay2 zh)pGO3AP28~oKd4e77wDkn9$`5vI z=O0{B5y-4U1p~{-+M+YJ*^er`cBiy^~Gn~-y8i_C}A>4_#v(wjH-^v2M9i%v^J3nCEM*q)-AK%O$e2N0zy@sfsMfz z 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

CGrj$3xe{RIQ4$oGgmg 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 literal 0 HcmV?d00001 diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/resources/rawfile/string.json b/function/ui_compare_rh/uicompare/entry/src/ohosTest/resources/rawfile/string.json index d1049d56..4e490613 100644 --- a/function/ui_compare_rh/uicompare/entry/src/ohosTest/resources/rawfile/string.json +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/resources/rawfile/string.json @@ -1,8 +1,8 @@ -{ - "string": [ - { - "name": "rawfile_string", - "value": "10vp" - } - ] +{ + "string": [ + { + "name": "rawfile_string", + "value": "10vp" + } + ] } \ No newline at end of file diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/resources/rawfile/text.html b/function/ui_compare_rh/uicompare/entry/src/ohosTest/resources/rawfile/text.html new file mode 100755 index 00000000..3bd3b99d --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/resources/rawfile/text.html @@ -0,0 +1,27 @@ + + + + + Demo + + + +Scroll Test + + + + + + + diff --git a/function/ui_compare_rh/uicompare/entry/src/ohosTest/resources/rawfile/video1.ts b/function/ui_compare_rh/uicompare/entry/src/ohosTest/resources/rawfile/video1.ts new file mode 100755 index 00000000..dd6d86ae --- /dev/null +++ b/function/ui_compare_rh/uicompare/entry/src/ohosTest/resources/rawfile/video1.ts @@ -0,0 +1,237 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file + * @kit ArkUI + */ + + + +import { Callback } from './@ohos.base'; +import window from './@ohos.window'; +/** + * uiExtension. + * + * @namespace uiExtension + * @syscap SystemCapability.ArkUI.ArkUI.Full + * @atomicservice + * @since 12 + */ +declare namespace uiExtension { + /** + * The proxy of the UIExtension window. + * + * @interface WindowProxy + * @syscap SystemCapability.ArkUI.ArkUI.Full + * @atomicservice + * @since 12 + */ + interface WindowProxy { + /** + * Get the avoid area. + * + * @param { window.AvoidAreaType } type - Type of the avoid area. + * @returns { window.AvoidArea } Area where the window cannot be displayed. + * @throws { BusinessError } 401 - Parameter error. Possible causes: + *
1. Mandatory parameters are left unspecified. + *
2. Incorrect parameters types. + *
3. Parameter verification failed. + * @syscap SystemCapability.ArkUI.ArkUI.Full + * @atomicservice + * @since 12 + */ + getWindowAvoidArea(type: window.AvoidAreaType): window.AvoidArea; + + /** + * Register the callback of avoidAreaChange. + * + * @param { 'avoidAreaChange' } type - The value is fixed at 'avoidAreaChange', indicating the event of changes to the avoid area. + * @param { Callback } callback - Callback used to return the avoid area information. + * @throws { BusinessError } 401 - Parameter error. Possible causes: + *
1. Mandatory parameters are left unspecified. + *
2. Incorrect parameters types. + *
3. Parameter verification failed. + * @syscap SystemCapability.ArkUI.ArkUI.Full + * @atomicservice + * @since 12 + */ + on(type: 'avoidAreaChange', callback: Callback): void; + + /** + * Unregister the callback of avoidAreaChange. + * + * @param { 'avoidAreaChange' } type - The value is fixed at 'avoidAreaChange', indicating the event of changes to the avoid area. + * @param { Callback } callback - Callback used to return the avoid area information. + * @throws { BusinessError } 401 - Parameter error. Possible causes: + *
1. Mandatory parameters are left unspecified. + *
2. Incorrect parameters types. + *
3. Parameter verification failed. + * @syscap SystemCapability.ArkUI.ArkUI.Full + * @atomicservice + * @since 12 + */ + off(type: 'avoidAreaChange', callback?: Callback): void; + + /** + * Register the callback of windowSizeChange. + * + * @param { 'windowSizeChange' } type - The value is fixed at 'windowSizeChange', indicating the window size change event. + * @param { Callback } callback - Callback used to return the window size. + * @throws { BusinessError } 401 - Parameter error. Possible causes: + *
1. Mandatory parameters are left unspecified. + *
2. Incorrect parameters types. + *
3. Parameter verification failed. + * @syscap SystemCapability.ArkUI.ArkUI.Full + * @atomicservice + * @since 12 + */ + on(type: 'windowSizeChange', callback: Callback): void; + + /** + * Unregister the callback of windowSizeChange. + * + * @param { 'windowSizeChange' } type - The value is fixed at 'windowSizeChange', indicating the window size change event. + * @param { Callback } callback - Callback used to return the window size. + * @throws { BusinessError } 401 - Parameter error. Possible causes: + *
1. Mandatory parameters are left unspecified. + *
2. Incorrect parameters types. + *
3. Parameter verification failed. + * @syscap SystemCapability.ArkUI.ArkUI.Full + * @atomicservice + * @since 12 + */ + off(type: 'windowSizeChange', callback?: Callback): void; + + /** + * Hide the non-secure windows. + * When called by modal UIExtension and shouldHide == false, the "ohos.permission.ALLOW_SHOW_NON_SECURE_WINDOWS" permission is required. + * + * @permission ohos.permission.ALLOW_SHOW_NON_SECURE_WINDOWS + * @param { boolean } shouldHide - Hide the non-secure windows if true, otherwise means the opposite. + * @returns { Promise } - The promise returned by the function. + * @throws { BusinessError } 202 - Permission verification failed. A non-system application calls a system API. + * @throws { BusinessError } 401 - Parameter error. Possible causes: + *
1. Mandatory parameters are left unspecified. + *
2. Incorrect parameters types. + *
3. Parameter verification failed. + * @throws { BusinessError } 1300002 - Abnormal state. Possible causes: + *
1. Permission denied. Interface caller does not have permission "ohos.permission.ALLOW_SHOW_NON_SECURE_WINDOWS". + *
2. The UIExtension window proxy is abnormal. + * @throws { BusinessError } 1300003 - This window manager service works abnormally. + * @syscap SystemCapability.ArkUI.ArkUI.Full + * @systemapi + * @since 12 + */ + hideNonSecureWindows(shouldHide: boolean): Promise; + + /** + * Create sub window. + * + * @param { string } name - window name of sub window. + * @param { window.SubWindowOptions } subWindowOptions - options of sub window creation. + * @returns { Promise } Promise used to return the subwindow. + * @throws { BusinessError } 401 - Parameter error. Possible causes: + *
1. Mandatory parameters are left unspecified. + *
2. Incorrect parameters types. + *
3. Parameter verification failed. + * @throws { BusinessError } 801 - Capability not supported. Failed to call the API due to limited device capabilities. + * @throws { BusinessError } 1300002 - This window state is abnormal. + * @throws { BusinessError } 1300005 - This window proxy is abnormal. + * @syscap SystemCapability.ArkUI.ArkUI.Full + * @StageModelOnly + * @atomicservice + * @since 12 + */ + createSubWindowWithOptions(name: string, subWindowOptions: window.SubWindowOptions): Promise; + + /** + * Set the watermark flag on the UIExtension window + * + * @param { boolean } enable - Add water mark flag to the UIExtension window if true, or remove flag if false + * @returns { Promise } - The promise returned by the function + * @throws { BusinessError } 1300002 - The UIExtension window proxy is abnormal. + * @throws { BusinessError } 1300003 - This window manager service works abnormally. + * @throws { BusinessError } 1300008 - The display device is abnormal. + * @syscap SystemCapability.ArkUI.ArkUI.Full + * @systemapi + * @since 12 + */ + setWaterMarkFlag(enable: boolean): Promise; + + /** + * The properties of the UIExtension window + * + * @type { WindowProxyProperties } + * @syscap SystemCapability.ArkUI.ArkUI.Full + * @atomicservice + * @since 14 + */ + properties: WindowProxyProperties; + } + + /** + * Defines the avoid area information. + * + * @interface AvoidAreaInfo + * @syscap SystemCapability.ArkUI.ArkUI.Full + * @atomicservice + * @since 12 + */ + interface AvoidAreaInfo { + /** + * Describes the type of avoid area. + * + * @type { window.AvoidAreaType } + * @syscap SystemCapability.ArkUI.ArkUI.Full + * @atomicservice + * @since 12 + */ + type: window.AvoidAreaType; + + /** + * Describes the position and size of avoid area. + * + * @type { window.AvoidArea } + * @syscap SystemCapability.ArkUI.ArkUI.Full + * @atomicservice + * @since 12 + */ + area: window.AvoidArea; + } + + /** + * Properties of UIExtension window + * + * @interface WindowProxyProperties + * @syscap SystemCapability.ArkUI.ArkUI.Full + * @atomicservice + * @since 14 + * + */ + interface WindowProxyProperties { + /** + * The position and size of the UIExtension window + * + * @type { window.Rect } + * @syscap SystemCapability.ArkUI.ArkUI.Full + * @atomicservice + * @since 14 + */ + uiExtensionHostWindowProxyRect: window.Rect; + } +} + +export default uiExtension; -- Gitee