1 /* 2 * Copyright (c) 2025 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include "../ui_input_event_test.h" 17 18 using namespace testing; 19 using namespace testing::ext; 20 21 namespace { 22 constexpr float TEST_PRESSURE = 0.5f; 23 constexpr float TEST_PRESSURE_2 = 0.7f; 24 } // namespace 25 26 namespace OHOS::Ace { 27 28 namespace { 29 struct GetPressureTestInputType { GetPressureTestInputTypeOHOS::Ace::__anonabd8971b0211::GetPressureTestInputType30 explicit GetPressureTestInputType(const ArkUI_UIInputEvent event, uint32_t pointerIndex = 0) 31 : event(event), pointerIndex(pointerIndex) {}; 32 ArkUI_UIInputEvent event; 33 uint32_t pointerIndex; 34 }; 35 } // namespace 36 37 /** 38 * @tc.name: OH_ArkUI_PointerEvent_GetPressure001 39 * @tc.desc: Test the OH_ArkUI_PointerEvent_GetPressure function with null event. 40 * @tc.type: FUNC 41 */ 42 HWTEST_F(UIInputEventTest, OH_ArkUI_PointerEvent_GetPressure001, TestSize.Level0) 43 { 44 auto result = OH_ArkUI_PointerEvent_GetPressure(nullptr, 0); 45 EXPECT_FLOAT_EQ(result, 0.0f); 46 } 47 48 /** 49 * @tc.name: OH_ArkUI_PointerEvent_GetPressure101 50 * @tc.desc: Test the OH_ArkUI_PointerEvent_GetPressure function with touch event. 51 * @tc.type: FUNC 52 */ 53 HWTEST_F(UIInputEventTest, OH_ArkUI_PointerEvent_GetPressure101, TestSize.Level0) 54 { 55 ArkUITouchEvent inputEvent; 56 ArkUIEventTypeId eventTypeId = C_TOUCH_EVENT_ID; 57 58 ArkUITouchPoint points[2]; 59 points[0].pressure = TEST_PRESSURE; 60 points[1].pressure = TEST_PRESSURE_2; 61 inputEvent.touchPointes = &points[0]; 62 inputEvent.touchPointSize = 2; 63 64 ArkUITouchEvent inputEventEmpty; 65 inputEventEmpty.touchPointes = nullptr; 66 inputEventEmpty.touchPointSize = 0; 67 68 std::vector<std::pair<GetPressureTestInputType, float>> testCases = { 69 // case 1: null touch event 70 { GetPressureTestInputType(ArkUI_UIInputEvent { ARKUI_UIINPUTEVENT_TYPE_UNKNOWN, eventTypeId, nullptr }, 0), 71 0.0f }, 72 // case 2: invalid pointer index (negative) 73 { GetPressureTestInputType( 74 ArkUI_UIInputEvent { ARKUI_UIINPUTEVENT_TYPE_UNKNOWN, eventTypeId, &inputEvent }, -1), 75 TEST_PRESSURE_2 }, 76 // case 3: invalid pointer index (out of range) 77 { GetPressureTestInputType(ArkUI_UIInputEvent { ARKUI_UIINPUTEVENT_TYPE_UNKNOWN, eventTypeId, &inputEvent }, 2), 78 TEST_PRESSURE_2 }, 79 // case 4: empty touch points 80 { GetPressureTestInputType( 81 ArkUI_UIInputEvent { ARKUI_UIINPUTEVENT_TYPE_UNKNOWN, eventTypeId, &inputEventEmpty }, 0), 82 0.0f }, 83 // case 5: valid pointer index 0 84 { GetPressureTestInputType(ArkUI_UIInputEvent { ARKUI_UIINPUTEVENT_TYPE_UNKNOWN, eventTypeId, &inputEvent }, 0), 85 TEST_PRESSURE_2 }, 86 // case 6: valid pointer index 1 87 { GetPressureTestInputType(ArkUI_UIInputEvent { ARKUI_UIINPUTEVENT_TYPE_UNKNOWN, eventTypeId, &inputEvent }, 1), 88 TEST_PRESSURE_2 }, 89 }; 90 91 for (size_t i = 0; i < testCases.size(); ++i) { 92 const auto& testCase = testCases[i]; 93 auto result = OH_ArkUI_PointerEvent_GetPressure(&testCase.first.event, testCase.first.pointerIndex); 94 EXPECT_FLOAT_EQ(result, testCase.second) << "Test case " << i + 1 << " failed"; 95 } 96 } 97 98 /** 99 * @tc.name: OH_ArkUI_PointerEvent_GetPressure102 100 * @tc.desc: Test the OH_ArkUI_PointerEvent_GetPressure function with mouse event. 101 * @tc.type: FUNC 102 */ 103 HWTEST_F(UIInputEventTest, OH_ArkUI_PointerEvent_GetPressure102, TestSize.Level0) 104 { 105 ArkUIMouseEvent inputEvent; 106 ArkUIEventTypeId eventTypeId = C_MOUSE_EVENT_ID; 107 inputEvent.actionTouchPoint.pressure = TEST_PRESSURE; 108 109 ArkUIMouseEvent inputEventEmpty; 110 inputEventEmpty.actionTouchPoint.pressure = 0.0f; 111 112 std::vector<std::pair<GetPressureTestInputType, float>> testCases = { 113 // case 1: null mouse event 114 { GetPressureTestInputType(ArkUI_UIInputEvent { ARKUI_UIINPUTEVENT_TYPE_UNKNOWN, eventTypeId, nullptr }, 0), 115 0.0f }, 116 // case 2: invalid pointer index (non-zero) 117 { GetPressureTestInputType(ArkUI_UIInputEvent { ARKUI_UIINPUTEVENT_TYPE_UNKNOWN, eventTypeId, &inputEvent }, 1), 118 TEST_PRESSURE }, 119 // case 3: valid case with index 0 120 { GetPressureTestInputType(ArkUI_UIInputEvent { ARKUI_UIINPUTEVENT_TYPE_UNKNOWN, eventTypeId, &inputEvent }, 0), 121 TEST_PRESSURE }, 122 // case 4: empty mouse event 123 { GetPressureTestInputType( 124 ArkUI_UIInputEvent { ARKUI_UIINPUTEVENT_TYPE_UNKNOWN, eventTypeId, &inputEventEmpty }, 0), 125 0.0f }, 126 }; 127 128 for (size_t i = 0; i < testCases.size(); ++i) { 129 const auto& testCase = testCases[i]; 130 auto result = OH_ArkUI_PointerEvent_GetPressure(&testCase.first.event, testCase.first.pointerIndex); 131 EXPECT_FLOAT_EQ(result, testCase.second) << "Test case " << i + 1 << " failed"; 132 } 133 } 134 135 /** 136 * @tc.name: OH_ArkUI_PointerEvent_GetPressure103 137 * @tc.desc: Test the OH_ArkUI_PointerEvent_GetPressure function with click event. 138 * @tc.type: FUNC 139 */ 140 HWTEST_F(UIInputEventTest, OH_ArkUI_PointerEvent_GetPressure103, TestSize.Level0) 141 { 142 ArkUIClickEvent inputEvent; 143 ArkUIEventTypeId eventTypeId = C_CLICK_EVENT_ID; 144 inputEvent.pressure = TEST_PRESSURE; 145 146 ArkUIClickEvent inputEventEmpty; 147 inputEventEmpty.pressure = 0.0f; 148 149 std::vector<std::pair<GetPressureTestInputType, float>> testCases = { 150 // case 1: null click event 151 { GetPressureTestInputType(ArkUI_UIInputEvent { ARKUI_UIINPUTEVENT_TYPE_UNKNOWN, eventTypeId, nullptr }, 0), 152 0.0f }, 153 // case 2: invalid pointer index (non-zero) 154 { GetPressureTestInputType(ArkUI_UIInputEvent { ARKUI_UIINPUTEVENT_TYPE_UNKNOWN, eventTypeId, &inputEvent }, 1), 155 TEST_PRESSURE }, 156 // case 3: valid case with index 0 157 { GetPressureTestInputType(ArkUI_UIInputEvent { ARKUI_UIINPUTEVENT_TYPE_UNKNOWN, eventTypeId, &inputEvent }, 0), 158 TEST_PRESSURE }, 159 // case 4: empty click event 160 { GetPressureTestInputType( 161 ArkUI_UIInputEvent { ARKUI_UIINPUTEVENT_TYPE_UNKNOWN, eventTypeId, &inputEventEmpty }, 0), 162 0.0f }, 163 }; 164 165 for (size_t i = 0; i < testCases.size(); ++i) { 166 const auto& testCase = testCases[i]; 167 auto result = OH_ArkUI_PointerEvent_GetPressure(&testCase.first.event, testCase.first.pointerIndex); 168 EXPECT_FLOAT_EQ(result, testCase.second) << "Test case " << i + 1 << " failed"; 169 } 170 } 171 172 /** 173 * @tc.name: OH_ArkUI_PointerEvent_GetPressure104 174 * @tc.desc: Test the OH_ArkUI_PointerEvent_GetPressure function with unsupported event types. 175 * @tc.type: FUNC 176 */ 177 HWTEST_F(UIInputEventTest, OH_ArkUI_PointerEvent_GetPressure104, TestSize.Level0) 178 { 179 std::vector<ArkUIEventTypeId> unsupportedTypeIds = { C_AXIS_EVENT_ID, C_KEY_EVENT_ID, C_FOCUS_AXIS_EVENT_ID, 180 C_HOVER_EVENT_ID }; 181 182 uint32_t pointerIndex = 0; 183 for (size_t i = 0; i < unsupportedTypeIds.size(); ++i) { 184 auto uiInputEvent = ArkUI_UIInputEvent { ARKUI_UIINPUTEVENT_TYPE_UNKNOWN, unsupportedTypeIds[i], nullptr }; 185 auto result = OH_ArkUI_PointerEvent_GetPressure(&uiInputEvent, pointerIndex); 186 EXPECT_FLOAT_EQ(result, 0.0f) << "Unsupported type test " << i + 1 << " failed"; 187 } 188 } 189 190 } // namespace OHOS::Ace