/* * Copyright (c) 2025 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. */ #include #include #include "gtest/gtest.h" #include "interfaces/native/native_gesture.h" #include "interfaces/native/native_interface.h" #include "interfaces/native/native_node.h" #include "interfaces/native/native_type.h" #include "interfaces/native/node/gesture_impl.h" #define private public #include "core/components_ng/gestures/long_press_gesture.h" #include "core/components_ng/gestures/recognizers/long_press_recognizer.h" #include "core/gestures/gesture_info.h" #include "frameworks/core/interfaces/arkoala/arkoala_api.h" using namespace testing; using namespace testing::ext; namespace OHOS::Ace { class NativeLongPressGestureTest : public testing::Test { public: static ArkUI_NativeGestureAPI_1* NATIVE_GESTURE_API; static void SetUpTestCase() { NATIVE_GESTURE_API = reinterpret_cast( OH_ArkUI_QueryModuleInterfaceByName(ARKUI_NATIVE_GESTURE, "ArkUI_NativeGestureAPI_1")); ASSERT_NE(NATIVE_GESTURE_API, nullptr); }; static void TearDownTestCase() { NATIVE_GESTURE_API = nullptr; }; }; ArkUI_NativeGestureAPI_1* NativeLongPressGestureTest::NATIVE_GESTURE_API = nullptr; /** * @tc.name: NativeLongPressGestureTest001 * @tc.desc: Test Native Api create LongPress handle fingerNum parameter, fingerNum must in range in [0, 10], when out * of this range the default value is 1. * @tc.type: FUNC */ HWTEST_F(NativeLongPressGestureTest, NativeLongPressGestureTest001, TestSize.Level1) { std::unordered_map fingerCountTestCases = { { -1, -1 }, //in native api -1 will retain the original value { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, {11, 11} //in native api 11 will retain the original value }; constexpr static int32_t DEFAULT_LONG_PRESS_DURATION = 1000; for (auto iter = fingerCountTestCases.begin(); iter != fingerCountTestCases.end(); iter++) { auto inputValue = iter->first; auto expectValue = iter->second; ArkUI_GestureRecognizer* longPressGestureRecognizer = NATIVE_GESTURE_API->createLongPressGesture( inputValue, false, DEFAULT_LONG_PRESS_DURATION); ASSERT_NE(longPressGestureRecognizer, nullptr); ASSERT_EQ(longPressGestureRecognizer->type, ArkUI_GestureRecognizerType::LONG_PRESS_GESTURE); Ace::NG::LongPressGesture* longPressGesture = reinterpret_cast(longPressGestureRecognizer->gesture); EXPECT_EQ(longPressGesture->GetFingers(), expectValue); NATIVE_GESTURE_API->dispose(longPressGestureRecognizer); } } /** * @tc.name: NativeLongPressGestureTest002 * @tc.desc: Test Native Api create LongPress handle duration parameter, duration must be positive, invalid values will * default to 500ms. * @tc.type: FUNC */ HWTEST_F(NativeLongPressGestureTest, NativeLongPressGestureTest002, TestSize.Level1) { std::unordered_map durationTestCases = { { -100, -100 }, //in native api -100 will retain the original value { 0, 0 }, // in native api 0 will retain the original value { 500, 500 }, { 1000, 1000 }, { 2000, 2000 }}; constexpr static int32_t DEFAULT_FINGER_NUM = 1; for (auto iter = durationTestCases.begin(); iter != durationTestCases.end(); iter++) { auto inputValue = iter->first; auto expectValue = iter->second; ArkUI_GestureRecognizer* longPressGestureRecognizer = NATIVE_GESTURE_API->createLongPressGesture(DEFAULT_FINGER_NUM, false, inputValue); ASSERT_NE(longPressGestureRecognizer, nullptr); ASSERT_EQ(longPressGestureRecognizer->type, ArkUI_GestureRecognizerType::LONG_PRESS_GESTURE); Ace::NG::LongPressGesture* longPressGesture = reinterpret_cast(longPressGestureRecognizer->gesture); EXPECT_DOUBLE_EQ(longPressGesture->duration_, expectValue); NATIVE_GESTURE_API->dispose(longPressGestureRecognizer); } } } // namespace OHOS::Ace