• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "test/unittest/core/manager/drag_drop/drag_drop_initiating_test_ng.h"
17 
18 #define private public
19 #define protected public
20 
21 #include "core/components_ng/manager/drag_drop/drag_drop_initiating/drag_drop_initiating_handler.h"
22 #include "core/components_ng/manager/drag_drop/drag_drop_initiating/drag_drop_initiating_state_moving.h"
23 #include "core/event/touch_event.h"
24 #include "core/gestures/drag_event.h"
25 
26 using namespace testing;
27 using namespace testing::ext;
28 
29 namespace OHOS::Ace::NG {
30 struct DragDropInitiatingStateMovingTestCase : public DragDropInitiatingStateTestCase {
31     SourceType sourceType = SourceType::TOUCH;
DragDropInitiatingStateMovingTestCaseOHOS::Ace::NG::DragDropInitiatingStateMovingTestCase32     DragDropInitiatingStateMovingTestCase(
33         DragDropInitiatingReceivedInput receivedInput, DragDropInitiatingStatus expectStatus, SourceType sourceType)
34         : DragDropInitiatingStateTestCase(DragDropInitiatingStatus::MOVING, receivedInput, expectStatus),
35           sourceType(sourceType)
36     {}
37 };
38 
39 const std::vector<DragDropInitiatingStateMovingTestCase> DRAG_DROP_INITIATING_STATE_MOVING_IMAGE_TEST_CASES = {
40     DragDropInitiatingStateMovingTestCase(
41         DragDropInitiatingReceivedInput::HandleHitTesting, DragDropInitiatingStatus::MOVING, SourceType::TOUCH),
42     DragDropInitiatingStateMovingTestCase(
43         DragDropInitiatingReceivedInput::HandleHitTesting, DragDropInitiatingStatus::MOVING, SourceType::MOUSE),
44     DragDropInitiatingStateMovingTestCase(
45         DragDropInitiatingReceivedInput::HandlePanOnActionStart, DragDropInitiatingStatus::MOVING, SourceType::TOUCH),
46     DragDropInitiatingStateMovingTestCase(
47         DragDropInitiatingReceivedInput::HandlePanOnActionStart, DragDropInitiatingStatus::MOVING, SourceType::MOUSE),
48     DragDropInitiatingStateMovingTestCase(
49         DragDropInitiatingReceivedInput::HandlePanOnActionEnd, DragDropInitiatingStatus::IDLE, SourceType::TOUCH),
50     DragDropInitiatingStateMovingTestCase(
51         DragDropInitiatingReceivedInput::HandlePanOnActionEnd, DragDropInitiatingStatus::IDLE, SourceType::MOUSE),
52     DragDropInitiatingStateMovingTestCase(
53         DragDropInitiatingReceivedInput::HandleTouchEvent, DragDropInitiatingStatus::MOVING, SourceType::MOUSE),
54     DragDropInitiatingStateMovingTestCase(
55         DragDropInitiatingReceivedInput::HandlePullEvent, DragDropInitiatingStatus::MOVING, SourceType::MOUSE),
56     DragDropInitiatingStateMovingTestCase(
57         DragDropInitiatingReceivedInput::HandleReStartDrag, DragDropInitiatingStatus::MOVING, SourceType::MOUSE),
58     DragDropInitiatingStateMovingTestCase(
59         DragDropInitiatingReceivedInput::HandleDragStart, DragDropInitiatingStatus::MOVING, SourceType::MOUSE),
60     DragDropInitiatingStateMovingTestCase(
61         DragDropInitiatingReceivedInput::HandleDragEnd, DragDropInitiatingStatus::IDLE, SourceType::MOUSE),
62     DragDropInitiatingStateMovingTestCase(
63         DragDropInitiatingReceivedInput::TransDragWindowToFwk, DragDropInitiatingStatus::IDLE, SourceType::MOUSE),
64     DragDropInitiatingStateMovingTestCase(
65         DragDropInitiatingReceivedInput::TransMenuShow, DragDropInitiatingStatus::IDLE, SourceType::MOUSE),
66 };
67 
SetUpTestCase()68 void DragDropInitiatingStateMovingTestNG::SetUpTestCase()
69 {
70     MockPipelineContext::SetUp();
71     MockContainer::SetUp();
72 }
73 
TearDownTestCase()74 void DragDropInitiatingStateMovingTestNG::TearDownTestCase()
75 {
76     MockPipelineContext::TearDown();
77     MockContainer::TearDown();
78 }
79 
80 /**
81  * @tc.name: DragDropInitiatingStateMovingTestNG001
82  * @tc.desc: Test DragDropInitiatingStateMoving class when frameNode is image.
83  * @tc.type: FUNC
84  */
85 HWTEST_F(DragDropInitiatingStateMovingTestNG, DragDropInitiatingStateMovingTestNG001, TestSize.Level1)
86 {
87     int32_t caseNum = 0;
88     for (const auto& testCase : DRAG_DROP_INITIATING_STATE_MOVING_IMAGE_TEST_CASES) {
89         /**
90          * @tc.steps: step1. create DragDropEventActuator.
91          */
92         auto eventHub = AceType::MakeRefPtr<EventHub>();
93         ASSERT_NE(eventHub, nullptr);
94         auto gestureEventHub = AceType::MakeRefPtr<GestureEventHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
95         ASSERT_NE(gestureEventHub, nullptr);
96         auto frameNode = FrameNode::GetOrCreateFrameNode(V2::IMAGE_ETS_TAG,
__anon18c2a9de0102() 97             ElementRegister::GetInstance()->MakeUniqueId(), []() { return AceType::MakeRefPtr<ImagePattern>(); });
98         ASSERT_NE(frameNode, nullptr);
99         eventHub->host_ = AceType::WeakClaim(AceType::RawPtr(frameNode));
100         auto dragDropEventActuator =
101             AceType::MakeRefPtr<DragDropEventActuator>(AceType::WeakClaim(AceType::RawPtr(gestureEventHub)));
102         ASSERT_NE(dragDropEventActuator, nullptr);
103         auto handler = dragDropEventActuator->dragDropInitiatingHandler_;
104         ASSERT_NE(handler, nullptr);
105         auto machine = handler->initiatingFlow_;
106         ASSERT_NE(machine, nullptr);
107         machine->InitializeState();
108         machine->currentState_ = static_cast<int32_t>(testCase.originStatus);
109         if (((static_cast<int32_t>(testCase.receivedInput)) & DRAG_ACTION_NONE_ARGS) != 0) {
110             DragDropInitiatingStateTestNG::DoMachineAction(machine, testCase.receivedInput);
111         } else if (((static_cast<int32_t>(testCase.receivedInput)) & DRAG_ACTION_DRAG_POINTER_EVENT_ARGS) != 0) {
112             DragPointerEvent dragPointerEvent;
113             DragDropInitiatingStateTestNG::DoMachineAction(machine, testCase.receivedInput, dragPointerEvent);
114         } else if (((static_cast<int32_t>(testCase.receivedInput)) & DRAG_ACTION_TOUCH_EVENT_ARGS) != 0) {
115             TouchEvent touchEvent;
116             touchEvent.sourceType = testCase.sourceType;
117             DragDropInitiatingStateTestNG::DoMachineAction(machine, testCase.receivedInput, touchEvent);
118         } else if (((static_cast<int32_t>(testCase.receivedInput)) & DRAG_ACTION_GESTURE_EVENT_ARGS) != 0) {
119             GestureEvent info;
120             info.SetSourceDevice(testCase.sourceType);
121             DragDropInitiatingStateTestNG::DoMachineAction(machine, testCase.receivedInput, info);
122         }
123         EXPECT_TRUE(DragDropInitiatingStateTestNG::CheckDragDropInitiatingStatus(
124             caseNum, static_cast<DragDropInitiatingStatus>(machine->currentState_), testCase.expectStatus));
125         caseNum++;
126     }
127 }
128 
129 } // namespace OHOS::Ace::NG