1 /* 2 * Copyright (c) 2024 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 <gtest/gtest.h> 17 #include <limits> 18 #include <test_header.h> 19 20 #include "hgm_core.h" 21 #include "hgm_frame_rate_manager.h" 22 23 using namespace testing; 24 using namespace testing::ext; 25 26 namespace OHOS { 27 namespace Rosen { 28 namespace { 29 constexpr int32_t waitTaskFinishNs = 100000; 30 } 31 class HgmTouchManagerTest : public testing::Test { 32 public: SetUpTestCase()33 static void SetUpTestCase() {} TearDownTestCase()34 static void TearDownTestCase() {} SetUp()35 void SetUp() {} TearDown()36 void TearDown() {} 37 }; 38 39 /** 40 * @tc.name: QuickTouch 41 * @tc.desc: Verify the result of QuickTouch function 42 * @tc.type: FUNC 43 * @tc.require: 44 */ 45 HWTEST_F(HgmTouchManagerTest, QuickTouch, Function | SmallTest | Level1) 46 { 47 int32_t clickNum = 100; 48 auto touchManager = HgmTouchManager(); 49 std::vector<std::thread> testThreads; 50 for (int i = 0; i < clickNum; i++) { __anoned3c07000202() 51 testThreads.push_back(std::thread([&] () { touchManager.ChangeState(TouchState::DOWN_STATE); })); __anoned3c07000302() 52 testThreads.push_back(std::thread([&] () { touchManager.ChangeState(TouchState::UP_STATE); })); 53 } 54 for (auto &testThread : testThreads) { 55 if (testThread.joinable()) { 56 testThread.join(); 57 } 58 } 59 touchManager.ChangeState(TouchState::IDLE_STATE); 60 sleep(1); // wait for 1s for the async task to complete 61 } 62 63 /** 64 * @tc.name: ChangeState 65 * @tc.desc: Verify the result of ChangeState function 66 * @tc.type: FUNC 67 * @tc.require: 68 */ 69 HWTEST_F(HgmTouchManagerTest, ChangeState, Function | SmallTest | Level1) 70 { 71 PART("CaseDescription") { 72 auto touchManager = HgmTouchManager(); 73 ASSERT_EQ(touchManager.GetState(), TouchState::IDLE_STATE); 74 75 touchManager.ChangeState(TouchState::UP_STATE); 76 ASSERT_EQ(touchManager.GetState(), TouchState::IDLE_STATE); 77 78 touchManager.ChangeState(TouchState::DOWN_STATE); 79 usleep(waitTaskFinishNs); 80 ASSERT_EQ(touchManager.GetState(), TouchState::DOWN_STATE); 81 82 touchManager.ChangeState(TouchState::IDLE_STATE); 83 ASSERT_EQ(touchManager.GetState(), TouchState::DOWN_STATE); 84 85 touchManager.ChangeState(TouchState::UP_STATE); 86 usleep(waitTaskFinishNs); 87 ASSERT_EQ(touchManager.GetState(), TouchState::UP_STATE); 88 89 touchManager.ChangeState(TouchState::DOWN_STATE); 90 usleep(waitTaskFinishNs); 91 ASSERT_EQ(touchManager.GetState(), TouchState::DOWN_STATE); 92 93 touchManager.ChangeState(TouchState::UP_STATE); 94 usleep(waitTaskFinishNs); 95 ASSERT_EQ(touchManager.GetState(), TouchState::UP_STATE); 96 97 touchManager.ChangeState(TouchState::IDLE_STATE); 98 usleep(waitTaskFinishNs); 99 ASSERT_EQ(touchManager.GetState(), TouchState::IDLE_STATE); 100 } 101 } 102 103 /** 104 * @tc.name: Up2IdleState 105 * @tc.desc: Verify the result of Up2IdleState function 106 * @tc.type: FUNC 107 * @tc.require: 108 */ 109 HWTEST_F(HgmTouchManagerTest, Up2IdleState, Function | SmallTest | Level1) 110 { 111 PART("CaseDescription") { 112 auto touchManager = HgmTouchManager(); 113 const int32_t rsTimeoutUs = 610000; 114 const int32_t handleRsFrameTimeUs = 510000; 115 const int32_t handleRsFrameNum = 5; 116 117 STEP("1. 600ms timeout") { 118 touchManager.ChangeState(TouchState::DOWN_STATE); 119 touchManager.ChangeState(TouchState::UP_STATE); 120 usleep(waitTaskFinishNs); 121 ASSERT_EQ(touchManager.GetState(), TouchState::UP_STATE); 122 123 usleep(rsTimeoutUs); 124 ASSERT_EQ(touchManager.GetState(), TouchState::IDLE_STATE); 125 } 126 STEP("2. 3s timeout") { 127 touchManager.ChangeState(TouchState::DOWN_STATE); 128 touchManager.ChangeState(TouchState::UP_STATE); 129 usleep(waitTaskFinishNs); 130 ASSERT_EQ(touchManager.GetState(), TouchState::UP_STATE); 131 132 for (int i = 0; i < handleRsFrameNum; i++) { 133 touchManager.HandleRsFrame(); 134 usleep(handleRsFrameTimeUs); 135 ASSERT_EQ(touchManager.GetState(), TouchState::UP_STATE); 136 } 137 usleep(handleRsFrameTimeUs); 138 ASSERT_EQ(touchManager.GetState(), TouchState::IDLE_STATE); 139 } 140 } 141 } 142 } // namespace Rosen 143 } // namespace OHOS