1c29fa5a6Sopenharmony_ci/* 2c29fa5a6Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3c29fa5a6Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4c29fa5a6Sopenharmony_ci * you may not use this file except in compliance with the License. 5c29fa5a6Sopenharmony_ci * You may obtain a copy of the License at 6c29fa5a6Sopenharmony_ci * 7c29fa5a6Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8c29fa5a6Sopenharmony_ci * 9c29fa5a6Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10c29fa5a6Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11c29fa5a6Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12c29fa5a6Sopenharmony_ci * See the License for the specific language governing permissions and 13c29fa5a6Sopenharmony_ci * limitations under the License. 14c29fa5a6Sopenharmony_ci */ 15c29fa5a6Sopenharmony_ci 16c29fa5a6Sopenharmony_ci#include <gtest/gtest.h> 17c29fa5a6Sopenharmony_ci 18c29fa5a6Sopenharmony_ci#include <queue> 19c29fa5a6Sopenharmony_ci#include <vector> 20c29fa5a6Sopenharmony_ci 21c29fa5a6Sopenharmony_ci#include "event_resample.h" 22c29fa5a6Sopenharmony_ci#include "input_event.h" 23c29fa5a6Sopenharmony_ci#include "mmi_log.h" 24c29fa5a6Sopenharmony_ci#include "window_info.h" 25c29fa5a6Sopenharmony_ci 26c29fa5a6Sopenharmony_ci#undef MMI_LOG_TAG 27c29fa5a6Sopenharmony_ci#define MMI_LOG_TAG "EventResampleTest" 28c29fa5a6Sopenharmony_ci 29c29fa5a6Sopenharmony_cinamespace OHOS { 30c29fa5a6Sopenharmony_cinamespace MMI { 31c29fa5a6Sopenharmony_ci 32c29fa5a6Sopenharmony_cinamespace { 33c29fa5a6Sopenharmony_ciusing namespace testing::ext; 34c29fa5a6Sopenharmony_ciconstexpr int64_t START_TIME = 10000; 35c29fa5a6Sopenharmony_ciconstexpr int64_t TIME_DELTA = 2500; 36c29fa5a6Sopenharmony_ciconstexpr uint32_t INITIAL_COORDS = 10; 37c29fa5a6Sopenharmony_ciconstexpr uint32_t COORDS_DELTA = 10; 38c29fa5a6Sopenharmony_ciconstexpr int64_t FRAME_TIME = 8000; 39c29fa5a6Sopenharmony_ci} // namespace 40c29fa5a6Sopenharmony_ci 41c29fa5a6Sopenharmony_ciclass EventResampleTest : public testing::Test { 42c29fa5a6Sopenharmony_cipublic: 43c29fa5a6Sopenharmony_ci static void SetUpTestCase(void) {} 44c29fa5a6Sopenharmony_ci static void TearDownTestCase(void) {} 45c29fa5a6Sopenharmony_ci 46c29fa5a6Sopenharmony_ci struct TestData { 47c29fa5a6Sopenharmony_ci uint32_t framesNum { 10 }; 48c29fa5a6Sopenharmony_ci uint32_t pointerId { 0 }; 49c29fa5a6Sopenharmony_ci uint32_t fingerNum { 1 }; 50c29fa5a6Sopenharmony_ci uint32_t evtNum { 0 }; 51c29fa5a6Sopenharmony_ci int64_t timeDelta { TIME_DELTA }; 52c29fa5a6Sopenharmony_ci uint32_t coordsDelta { COORDS_DELTA }; 53c29fa5a6Sopenharmony_ci }; 54c29fa5a6Sopenharmony_ci 55c29fa5a6Sopenharmony_ci struct Context { 56c29fa5a6Sopenharmony_ci int32_t lastDispX { INITIAL_COORDS }; 57c29fa5a6Sopenharmony_ci int32_t lastDispY { INITIAL_COORDS }; 58c29fa5a6Sopenharmony_ci int64_t lastTime { START_TIME }; 59c29fa5a6Sopenharmony_ci int64_t frameTime { START_TIME }; 60c29fa5a6Sopenharmony_ci int64_t lastFrameTime { START_TIME }; 61c29fa5a6Sopenharmony_ci 62c29fa5a6Sopenharmony_ci void Reset(void) 63c29fa5a6Sopenharmony_ci { 64c29fa5a6Sopenharmony_ci lastDispX = INITIAL_COORDS; 65c29fa5a6Sopenharmony_ci lastDispY = INITIAL_COORDS; 66c29fa5a6Sopenharmony_ci lastTime = START_TIME; 67c29fa5a6Sopenharmony_ci frameTime = START_TIME; 68c29fa5a6Sopenharmony_ci lastFrameTime = START_TIME; 69c29fa5a6Sopenharmony_ci } 70c29fa5a6Sopenharmony_ci }; 71c29fa5a6Sopenharmony_ci 72c29fa5a6Sopenharmony_ci struct InputEvt { 73c29fa5a6Sopenharmony_ci int32_t action { PointerEvent::POINTER_ACTION_UNKNOWN }; 74c29fa5a6Sopenharmony_ci int64_t actionTime { START_TIME }; 75c29fa5a6Sopenharmony_ci int32_t dispX { INITIAL_COORDS }; 76c29fa5a6Sopenharmony_ci int32_t dispY { INITIAL_COORDS }; 77c29fa5a6Sopenharmony_ci int32_t id { 0 }; 78c29fa5a6Sopenharmony_ci 79c29fa5a6Sopenharmony_ci void Initialize(int32_t action, TestData &testData, Context &context) 80c29fa5a6Sopenharmony_ci { 81c29fa5a6Sopenharmony_ci this->action = action; 82c29fa5a6Sopenharmony_ci dispX = context.lastDispX + testData.coordsDelta; 83c29fa5a6Sopenharmony_ci context.lastDispX = dispX; 84c29fa5a6Sopenharmony_ci dispY = context.lastDispY + testData.coordsDelta; 85c29fa5a6Sopenharmony_ci context.lastDispY = dispY; 86c29fa5a6Sopenharmony_ci id = testData.pointerId; 87c29fa5a6Sopenharmony_ci 88c29fa5a6Sopenharmony_ci if (action == PointerEvent::POINTER_ACTION_DOWN) { 89c29fa5a6Sopenharmony_ci actionTime = context.lastFrameTime; 90c29fa5a6Sopenharmony_ci context.lastTime = 0; 91c29fa5a6Sopenharmony_ci } else { 92c29fa5a6Sopenharmony_ci actionTime = context.lastFrameTime + context.lastTime + testData.timeDelta; 93c29fa5a6Sopenharmony_ci context.lastTime = actionTime - context.lastFrameTime; 94c29fa5a6Sopenharmony_ci } 95c29fa5a6Sopenharmony_ci } 96c29fa5a6Sopenharmony_ci 97c29fa5a6Sopenharmony_ci void InitializeFrom(InputEvt &event) 98c29fa5a6Sopenharmony_ci { 99c29fa5a6Sopenharmony_ci action = event.action; 100c29fa5a6Sopenharmony_ci actionTime = event.actionTime; 101c29fa5a6Sopenharmony_ci dispX = event.dispX; 102c29fa5a6Sopenharmony_ci dispY = event.dispY; 103c29fa5a6Sopenharmony_ci id = event.id; 104c29fa5a6Sopenharmony_ci }; 105c29fa5a6Sopenharmony_ci }; 106c29fa5a6Sopenharmony_ci 107c29fa5a6Sopenharmony_ci struct ExpectedData { 108c29fa5a6Sopenharmony_ci int64_t actionTime { 0 }; 109c29fa5a6Sopenharmony_ci int32_t dispX { 0 }; 110c29fa5a6Sopenharmony_ci int32_t dispY { 0 }; 111c29fa5a6Sopenharmony_ci int64_t touchUpTime { 0 }; 112c29fa5a6Sopenharmony_ci int32_t touchUpX { 0 }; 113c29fa5a6Sopenharmony_ci int32_t touchUpY { 0 }; 114c29fa5a6Sopenharmony_ci int32_t id { 0 }; 115c29fa5a6Sopenharmony_ci 116c29fa5a6Sopenharmony_ci ExpectedData() {} 117c29fa5a6Sopenharmony_ci 118c29fa5a6Sopenharmony_ci void Reset(int32_t id) 119c29fa5a6Sopenharmony_ci { 120c29fa5a6Sopenharmony_ci this->id = id; 121c29fa5a6Sopenharmony_ci actionTime = 0; 122c29fa5a6Sopenharmony_ci dispX = 0; 123c29fa5a6Sopenharmony_ci dispY = 0; 124c29fa5a6Sopenharmony_ci touchUpTime = 0; 125c29fa5a6Sopenharmony_ci touchUpX = 0; 126c29fa5a6Sopenharmony_ci touchUpY = 0; 127c29fa5a6Sopenharmony_ci } 128c29fa5a6Sopenharmony_ci 129c29fa5a6Sopenharmony_ci void UpdateTouchState(InputEvt &event) 130c29fa5a6Sopenharmony_ci { 131c29fa5a6Sopenharmony_ci if (id != event.id) { 132c29fa5a6Sopenharmony_ci return; 133c29fa5a6Sopenharmony_ci } 134c29fa5a6Sopenharmony_ci 135c29fa5a6Sopenharmony_ci switch (event.action) { 136c29fa5a6Sopenharmony_ci case PointerEvent::POINTER_ACTION_DOWN : { 137c29fa5a6Sopenharmony_ci touchState.clear(); 138c29fa5a6Sopenharmony_ci eventBatch.clear(); 139c29fa5a6Sopenharmony_ci InputEvt evt; 140c29fa5a6Sopenharmony_ci evt.InitializeFrom(event); 141c29fa5a6Sopenharmony_ci touchState.insert(touchState.begin(), std::move(evt)); 142c29fa5a6Sopenharmony_ci actionTime = event.actionTime; 143c29fa5a6Sopenharmony_ci dispX = event.dispX; 144c29fa5a6Sopenharmony_ci dispY = event.dispY; 145c29fa5a6Sopenharmony_ci break; 146c29fa5a6Sopenharmony_ci } 147c29fa5a6Sopenharmony_ci case PointerEvent::POINTER_ACTION_UP : { 148c29fa5a6Sopenharmony_ci touchState.clear(); 149c29fa5a6Sopenharmony_ci eventBatch.clear(); 150c29fa5a6Sopenharmony_ci touchUpTime = event.actionTime; 151c29fa5a6Sopenharmony_ci touchUpX = event.dispX; 152c29fa5a6Sopenharmony_ci touchUpY = event.dispY; 153c29fa5a6Sopenharmony_ci break; 154c29fa5a6Sopenharmony_ci } 155c29fa5a6Sopenharmony_ci case PointerEvent::POINTER_ACTION_MOVE : { 156c29fa5a6Sopenharmony_ci while (touchState.size() > 1) { 157c29fa5a6Sopenharmony_ci touchState.pop_back(); 158c29fa5a6Sopenharmony_ci } 159c29fa5a6Sopenharmony_ci InputEvt evt; 160c29fa5a6Sopenharmony_ci evt.InitializeFrom(event); 161c29fa5a6Sopenharmony_ci touchState.insert(touchState.begin(), std::move(evt)); 162c29fa5a6Sopenharmony_ci actionTime = event.actionTime; 163c29fa5a6Sopenharmony_ci dispX = event.dispX; 164c29fa5a6Sopenharmony_ci dispY = event.dispY; 165c29fa5a6Sopenharmony_ci break; 166c29fa5a6Sopenharmony_ci } 167c29fa5a6Sopenharmony_ci } 168c29fa5a6Sopenharmony_ci } 169c29fa5a6Sopenharmony_ci 170c29fa5a6Sopenharmony_ci void AddEvent(InputEvt &event) 171c29fa5a6Sopenharmony_ci { 172c29fa5a6Sopenharmony_ci if (id != event.id) { 173c29fa5a6Sopenharmony_ci return; 174c29fa5a6Sopenharmony_ci } 175c29fa5a6Sopenharmony_ci 176c29fa5a6Sopenharmony_ci if (event.action == PointerEvent::POINTER_ACTION_MOVE) { 177c29fa5a6Sopenharmony_ci InputEvt evt; 178c29fa5a6Sopenharmony_ci evt.InitializeFrom(event); 179c29fa5a6Sopenharmony_ci eventBatch.push_back(std::move(evt)); 180c29fa5a6Sopenharmony_ci } else { 181c29fa5a6Sopenharmony_ci if ((event.action == PointerEvent::POINTER_ACTION_UP) && (!eventBatch.empty())) { 182c29fa5a6Sopenharmony_ci for (size_t i = 0; i < eventBatch.size(); i++) { 183c29fa5a6Sopenharmony_ci InputEvt& event = eventBatch.at(i); 184c29fa5a6Sopenharmony_ci UpdateTouchState(event); 185c29fa5a6Sopenharmony_ci } 186c29fa5a6Sopenharmony_ci eventBatch.erase(eventBatch.begin(), eventBatch.begin() + eventBatch.size() - 1); 187c29fa5a6Sopenharmony_ci } 188c29fa5a6Sopenharmony_ci UpdateTouchState(event); 189c29fa5a6Sopenharmony_ci } 190c29fa5a6Sopenharmony_ci } 191c29fa5a6Sopenharmony_ci 192c29fa5a6Sopenharmony_ci int32_t CalculateExpected(int64_t frameTime) 193c29fa5a6Sopenharmony_ci { 194c29fa5a6Sopenharmony_ci int64_t sampleTime = frameTime - EventResample::RESAMPLE_LATENCY; 195c29fa5a6Sopenharmony_ci InputEvt current; 196c29fa5a6Sopenharmony_ci 197c29fa5a6Sopenharmony_ci if (eventBatch.empty()) { 198c29fa5a6Sopenharmony_ci MMI_HILOGD("Event Batch empty"); 199c29fa5a6Sopenharmony_ci return ERR_WOULD_BLOCK; 200c29fa5a6Sopenharmony_ci } 201c29fa5a6Sopenharmony_ci 202c29fa5a6Sopenharmony_ci size_t numSamples = eventBatch.size(); 203c29fa5a6Sopenharmony_ci size_t idx = 0; 204c29fa5a6Sopenharmony_ci while ((idx < numSamples) && (eventBatch.at(idx).actionTime <= sampleTime)) { 205c29fa5a6Sopenharmony_ci idx += 1; 206c29fa5a6Sopenharmony_ci } 207c29fa5a6Sopenharmony_ci ssize_t split = ssize_t(idx) - 1; 208c29fa5a6Sopenharmony_ci if (split < 0) { 209c29fa5a6Sopenharmony_ci MMI_HILOGD("Negative split value"); 210c29fa5a6Sopenharmony_ci return ERR_WOULD_BLOCK; 211c29fa5a6Sopenharmony_ci } 212c29fa5a6Sopenharmony_ci size_t count = split + 1; 213c29fa5a6Sopenharmony_ci 214c29fa5a6Sopenharmony_ci // Consume samples in batch 215c29fa5a6Sopenharmony_ci for (size_t i = 0; i < count; i++) { 216c29fa5a6Sopenharmony_ci InputEvt& event = eventBatch.at(i); 217c29fa5a6Sopenharmony_ci UpdateTouchState(event); 218c29fa5a6Sopenharmony_ci } 219c29fa5a6Sopenharmony_ci eventBatch.erase(eventBatch.begin(), eventBatch.begin() + count); 220c29fa5a6Sopenharmony_ci 221c29fa5a6Sopenharmony_ci current.InitializeFrom(touchState[0]); 222c29fa5a6Sopenharmony_ci 223c29fa5a6Sopenharmony_ci return ResampleCoord(sampleTime, current); 224c29fa5a6Sopenharmony_ci } 225c29fa5a6Sopenharmony_ci 226c29fa5a6Sopenharmony_ci int32_t ResampleCoord(int64_t sampleTime, InputEvt ¤t) 227c29fa5a6Sopenharmony_ci { 228c29fa5a6Sopenharmony_ci float alpha = 0.0; 229c29fa5a6Sopenharmony_ci InputEvt other; 230c29fa5a6Sopenharmony_ci 231c29fa5a6Sopenharmony_ci if (eventBatch.empty()) { 232c29fa5a6Sopenharmony_ci // Coordinates extrapolation 233c29fa5a6Sopenharmony_ci MMI_HILOGD("Extrapolation"); 234c29fa5a6Sopenharmony_ci if (touchState.size() < EventResample::HISTORY_SIZE_MAX) { 235c29fa5a6Sopenharmony_ci return ERR_OK; 236c29fa5a6Sopenharmony_ci } 237c29fa5a6Sopenharmony_ci other.InitializeFrom(touchState[1]); 238c29fa5a6Sopenharmony_ci int64_t delta = touchState[0].actionTime - touchState[1].actionTime; 239c29fa5a6Sopenharmony_ci if (delta < EventResample::RESAMPLE_MIN_DELTA) { 240c29fa5a6Sopenharmony_ci return ERR_OK; 241c29fa5a6Sopenharmony_ci } else if (delta > EventResample::RESAMPLE_MAX_DELTA) { 242c29fa5a6Sopenharmony_ci return ERR_OK; 243c29fa5a6Sopenharmony_ci } 244c29fa5a6Sopenharmony_ci int64_t maxPredict = touchState[0].actionTime + 245c29fa5a6Sopenharmony_ci std::min(delta / 2, EventResample::RESAMPLE_MAX_PREDICTION); 246c29fa5a6Sopenharmony_ci if (sampleTime > maxPredict) { 247c29fa5a6Sopenharmony_ci sampleTime = maxPredict; 248c29fa5a6Sopenharmony_ci } 249c29fa5a6Sopenharmony_ci alpha = static_cast<float>(touchState[0].actionTime - sampleTime) / delta; 250c29fa5a6Sopenharmony_ci } else { 251c29fa5a6Sopenharmony_ci // Coordinates interpolation 252c29fa5a6Sopenharmony_ci MMI_HILOGD("Interpolation"); 253c29fa5a6Sopenharmony_ci InputEvt &next = eventBatch.front(); 254c29fa5a6Sopenharmony_ci other.InitializeFrom(next); 255c29fa5a6Sopenharmony_ci int64_t delta = next.actionTime - touchState[0].actionTime; 256c29fa5a6Sopenharmony_ci if (delta < EventResample::RESAMPLE_MIN_DELTA) { 257c29fa5a6Sopenharmony_ci MMI_HILOGD("RESAMPLE_MIN_DELTA = %{public}" PRId64 ", next_x = %{public}d, ts0_x = %{public}d", 258c29fa5a6Sopenharmony_ci delta, next.dispX, touchState[0].dispX); 259c29fa5a6Sopenharmony_ci return ERR_OK; 260c29fa5a6Sopenharmony_ci } 261c29fa5a6Sopenharmony_ci alpha = static_cast<float>(sampleTime - touchState[0].actionTime) / delta; 262c29fa5a6Sopenharmony_ci } 263c29fa5a6Sopenharmony_ci 264c29fa5a6Sopenharmony_ci dispX = CalcCoord(current.dispX, other.dispX, alpha); 265c29fa5a6Sopenharmony_ci dispY = CalcCoord(current.dispY, other.dispY, alpha); 266c29fa5a6Sopenharmony_ci actionTime = sampleTime; 267c29fa5a6Sopenharmony_ci 268c29fa5a6Sopenharmony_ci return ERR_OK; 269c29fa5a6Sopenharmony_ci } 270c29fa5a6Sopenharmony_ci 271c29fa5a6Sopenharmony_ci protected: 272c29fa5a6Sopenharmony_ci std::vector<InputEvt> touchState; 273c29fa5a6Sopenharmony_ci std::vector<InputEvt> eventBatch; 274c29fa5a6Sopenharmony_ci }; 275c29fa5a6Sopenharmony_ci 276c29fa5a6Sopenharmony_ci EventResampleTest(); 277c29fa5a6Sopenharmony_ci ~EventResampleTest(); 278c29fa5a6Sopenharmony_ci 279c29fa5a6Sopenharmony_ci bool SetupPointerEvent(InputEvt &event, TestData &testData); 280c29fa5a6Sopenharmony_ci int32_t CheckResults(std::shared_ptr<PointerEvent> outEvent, 281c29fa5a6Sopenharmony_ci std::vector<ExpectedData> &expected, Context &context); 282c29fa5a6Sopenharmony_ci bool DoTest(TestData &testData, int32_t testId); 283c29fa5a6Sopenharmony_ci void ReadQueue(TestData &testData, Context &ctx, std::vector<ExpectedData> &expected); 284c29fa5a6Sopenharmony_ci void SendTouchUp(TestData &testData, Context &ctx, std::vector<ExpectedData> &expected); 285c29fa5a6Sopenharmony_ci 286c29fa5a6Sopenharmony_ci std::shared_ptr<PointerEvent> pointerEvent_ = nullptr; 287c29fa5a6Sopenharmony_ci std::queue<InputEvt> eventQueue_; 288c29fa5a6Sopenharmony_ci uint32_t failCount_ = 0; 289c29fa5a6Sopenharmony_ci}; 290c29fa5a6Sopenharmony_ci 291c29fa5a6Sopenharmony_ciEventResampleTest::EventResampleTest() 292c29fa5a6Sopenharmony_ci{ 293c29fa5a6Sopenharmony_ci pointerEvent_ = PointerEvent::Create(); 294c29fa5a6Sopenharmony_ci} 295c29fa5a6Sopenharmony_ci 296c29fa5a6Sopenharmony_ciEventResampleTest::~EventResampleTest() 297c29fa5a6Sopenharmony_ci{ 298c29fa5a6Sopenharmony_ci} 299c29fa5a6Sopenharmony_ci 300c29fa5a6Sopenharmony_cibool EventResampleTest::SetupPointerEvent(InputEvt &event, TestData &testData) 301c29fa5a6Sopenharmony_ci{ 302c29fa5a6Sopenharmony_ci pointerEvent_->SetSourceType(PointerEvent::SOURCE_TYPE_TOUCHSCREEN); 303c29fa5a6Sopenharmony_ci pointerEvent_->SetPointerAction(event.action); 304c29fa5a6Sopenharmony_ci pointerEvent_->SetPointerId(event.id); 305c29fa5a6Sopenharmony_ci pointerEvent_->SetDeviceId(0); 306c29fa5a6Sopenharmony_ci 307c29fa5a6Sopenharmony_ci auto pointIds = pointerEvent_->GetPointerIds(); 308c29fa5a6Sopenharmony_ci int64_t time = event.actionTime; 309c29fa5a6Sopenharmony_ci if (pointIds.empty()) { 310c29fa5a6Sopenharmony_ci pointerEvent_->SetActionStartTime(time); 311c29fa5a6Sopenharmony_ci } 312c29fa5a6Sopenharmony_ci pointerEvent_->SetActionTime(time); 313c29fa5a6Sopenharmony_ci 314c29fa5a6Sopenharmony_ci for (uint32_t idx = 0; idx < testData.fingerNum; idx++) { 315c29fa5a6Sopenharmony_ci PointerEvent::PointerItem item; 316c29fa5a6Sopenharmony_ci if (pointerEvent_->GetPointerItem(idx, item)) { 317c29fa5a6Sopenharmony_ci item.SetPointerId(idx); 318c29fa5a6Sopenharmony_ci item.SetDisplayX(event.dispX); 319c29fa5a6Sopenharmony_ci item.SetDisplayY(event.dispY); 320c29fa5a6Sopenharmony_ci item.SetToolType(PointerEvent::TOOL_TYPE_FINGER); 321c29fa5a6Sopenharmony_ci item.SetDeviceId(0); 322c29fa5a6Sopenharmony_ci pointerEvent_->UpdatePointerItem(idx, item); 323c29fa5a6Sopenharmony_ci } else { 324c29fa5a6Sopenharmony_ci item.SetPointerId(idx); 325c29fa5a6Sopenharmony_ci item.SetDisplayX(event.dispX); 326c29fa5a6Sopenharmony_ci item.SetDisplayY(event.dispY); 327c29fa5a6Sopenharmony_ci item.SetToolType(PointerEvent::TOOL_TYPE_FINGER); 328c29fa5a6Sopenharmony_ci item.SetDeviceId(0); 329c29fa5a6Sopenharmony_ci pointerEvent_->AddPointerItem(item); 330c29fa5a6Sopenharmony_ci } 331c29fa5a6Sopenharmony_ci } 332c29fa5a6Sopenharmony_ci 333c29fa5a6Sopenharmony_ci return true; 334c29fa5a6Sopenharmony_ci} 335c29fa5a6Sopenharmony_ci 336c29fa5a6Sopenharmony_ciint32_t EventResampleTest::CheckResults(std::shared_ptr<PointerEvent> outEvent, 337c29fa5a6Sopenharmony_ci std::vector<ExpectedData> &expected, Context &context) 338c29fa5a6Sopenharmony_ci{ 339c29fa5a6Sopenharmony_ci bool ret = ERR_OK; 340c29fa5a6Sopenharmony_ci int32_t failCount = 0; 341c29fa5a6Sopenharmony_ci int64_t actionTime = 0; 342c29fa5a6Sopenharmony_ci int32_t dispX = 0; 343c29fa5a6Sopenharmony_ci int32_t dispY = 0; 344c29fa5a6Sopenharmony_ci 345c29fa5a6Sopenharmony_ci for (auto &it : expected) { 346c29fa5a6Sopenharmony_ci PointerEvent::PointerItem pointerItem; 347c29fa5a6Sopenharmony_ci if (!outEvent->GetPointerItem(it.id, pointerItem)) { 348c29fa5a6Sopenharmony_ci EXPECT_TRUE(false); 349c29fa5a6Sopenharmony_ci ret = ERR_INVALID_VALUE; 350c29fa5a6Sopenharmony_ci break; 351c29fa5a6Sopenharmony_ci } 352c29fa5a6Sopenharmony_ci 353c29fa5a6Sopenharmony_ci if (outEvent->GetPointerAction() == PointerEvent::POINTER_ACTION_DOWN) { 354c29fa5a6Sopenharmony_ci actionTime = expected[it.id].actionTime; 355c29fa5a6Sopenharmony_ci dispX = expected[it.id].dispX; 356c29fa5a6Sopenharmony_ci dispY = expected[it.id].dispY; 357c29fa5a6Sopenharmony_ci } else if (outEvent->GetPointerAction() == PointerEvent::POINTER_ACTION_MOVE) { 358c29fa5a6Sopenharmony_ci expected[it.id].CalculateExpected(context.frameTime); 359c29fa5a6Sopenharmony_ci actionTime = expected[it.id].actionTime; 360c29fa5a6Sopenharmony_ci dispX = expected[it.id].dispX; 361c29fa5a6Sopenharmony_ci dispY = expected[it.id].dispY; 362c29fa5a6Sopenharmony_ci } else if (outEvent->GetPointerAction() == PointerEvent::POINTER_ACTION_UP) { 363c29fa5a6Sopenharmony_ci actionTime = expected[it.id].touchUpTime; 364c29fa5a6Sopenharmony_ci dispX = expected[it.id].touchUpX; 365c29fa5a6Sopenharmony_ci dispY = expected[it.id].touchUpY; 366c29fa5a6Sopenharmony_ci } 367c29fa5a6Sopenharmony_ci 368c29fa5a6Sopenharmony_ci MMI_HILOGD("OutEvent: x=%{public}d y=%{public}d t=%{public}" PRId64 " f=%{public}" PRId64 " (%{public}d)", 369c29fa5a6Sopenharmony_ci pointerItem.GetDisplayX(), pointerItem.GetDisplayY(), outEvent->GetActionTime(), 370c29fa5a6Sopenharmony_ci context.frameTime, outEvent->GetPointerAction()); 371c29fa5a6Sopenharmony_ci MMI_HILOGD("Expected: x=%{public}d y=%{public}d t=%{public}" PRId64, dispX, dispY, actionTime); 372c29fa5a6Sopenharmony_ci 373c29fa5a6Sopenharmony_ci if (pointerItem.GetDisplayX() != dispX) { 374c29fa5a6Sopenharmony_ci failCount++; 375c29fa5a6Sopenharmony_ci EXPECT_EQ(pointerItem.GetDisplayX(), dispX); 376c29fa5a6Sopenharmony_ci } 377c29fa5a6Sopenharmony_ci if (pointerItem.GetDisplayY() != dispY) { 378c29fa5a6Sopenharmony_ci failCount++; 379c29fa5a6Sopenharmony_ci EXPECT_EQ(pointerItem.GetDisplayY(), dispY); 380c29fa5a6Sopenharmony_ci } 381c29fa5a6Sopenharmony_ci if (outEvent->GetActionTime() != actionTime) { 382c29fa5a6Sopenharmony_ci failCount++; 383c29fa5a6Sopenharmony_ci EXPECT_EQ(outEvent->GetActionTime(), actionTime); 384c29fa5a6Sopenharmony_ci } 385c29fa5a6Sopenharmony_ci 386c29fa5a6Sopenharmony_ci if (failCount != 0) { 387c29fa5a6Sopenharmony_ci MMI_HILOGD("Test Failed"); 388c29fa5a6Sopenharmony_ci } 389c29fa5a6Sopenharmony_ci failCount_ += failCount; 390c29fa5a6Sopenharmony_ci } 391c29fa5a6Sopenharmony_ci 392c29fa5a6Sopenharmony_ci return ret; 393c29fa5a6Sopenharmony_ci} 394c29fa5a6Sopenharmony_ci 395c29fa5a6Sopenharmony_cibool EventResampleTest::DoTest(TestData &testData, int32_t testId) 396c29fa5a6Sopenharmony_ci{ 397c29fa5a6Sopenharmony_ci CHKPF(pointerEvent_); 398c29fa5a6Sopenharmony_ci pointerEvent_->Reset(); 399c29fa5a6Sopenharmony_ci Context ctx; 400c29fa5a6Sopenharmony_ci std::shared_ptr<PointerEvent> outEvent = nullptr; 401c29fa5a6Sopenharmony_ci std::vector<ExpectedData> expected(testData.fingerNum); 402c29fa5a6Sopenharmony_ci 403c29fa5a6Sopenharmony_ci MMI_HILOGD("Start test %{public}d", testId); 404c29fa5a6Sopenharmony_ci 405c29fa5a6Sopenharmony_ci for (uint32_t idx = 0; idx < testData.fingerNum; idx++) { 406c29fa5a6Sopenharmony_ci expected[idx].Reset(idx); 407c29fa5a6Sopenharmony_ci } 408c29fa5a6Sopenharmony_ci 409c29fa5a6Sopenharmony_ci failCount_ = 0; 410c29fa5a6Sopenharmony_ci ctx.Reset(); 411c29fa5a6Sopenharmony_ci 412c29fa5a6Sopenharmony_ci // Send touch down event 413c29fa5a6Sopenharmony_ci InputEvt touchDown; 414c29fa5a6Sopenharmony_ci touchDown.Initialize(PointerEvent::POINTER_ACTION_DOWN, testData, ctx); 415c29fa5a6Sopenharmony_ci eventQueue_.push(std::move(touchDown)); 416c29fa5a6Sopenharmony_ci 417c29fa5a6Sopenharmony_ci // Send touch moving events 418c29fa5a6Sopenharmony_ci for (uint32_t idx = 0; idx < testData.framesNum; idx++) { 419c29fa5a6Sopenharmony_ci ctx.lastFrameTime = ctx.frameTime; 420c29fa5a6Sopenharmony_ci ctx.frameTime += FRAME_TIME; 421c29fa5a6Sopenharmony_ci ctx.lastTime = 0; 422c29fa5a6Sopenharmony_ci MMI_HILOGD("Frame %{public}d: lf = %{public}" PRId64 " f = %{public}" PRId64, 423c29fa5a6Sopenharmony_ci idx, ctx.lastFrameTime, ctx.frameTime); 424c29fa5a6Sopenharmony_ci 425c29fa5a6Sopenharmony_ci for (uint32_t eidx = 0; eidx < testData.evtNum; eidx++) { 426c29fa5a6Sopenharmony_ci InputEvt touchMove; 427c29fa5a6Sopenharmony_ci touchMove.Initialize(PointerEvent::POINTER_ACTION_MOVE, testData, ctx); 428c29fa5a6Sopenharmony_ci eventQueue_.push(std::move(touchMove)); 429c29fa5a6Sopenharmony_ci } 430c29fa5a6Sopenharmony_ci 431c29fa5a6Sopenharmony_ci // Read data from queue and check results 432c29fa5a6Sopenharmony_ci ReadQueue(testData, ctx, expected); 433c29fa5a6Sopenharmony_ci } 434c29fa5a6Sopenharmony_ci 435c29fa5a6Sopenharmony_ci // Send touch up event 436c29fa5a6Sopenharmony_ci SendTouchUp(testData, ctx, expected); 437c29fa5a6Sopenharmony_ci 438c29fa5a6Sopenharmony_ci return (failCount_ != 0) ? false : true; 439c29fa5a6Sopenharmony_ci} 440c29fa5a6Sopenharmony_ci 441c29fa5a6Sopenharmony_civoid EventResampleTest::ReadQueue(TestData &testData, Context &ctx, std::vector<ExpectedData> &expected) 442c29fa5a6Sopenharmony_ci{ 443c29fa5a6Sopenharmony_ci std::shared_ptr<PointerEvent> outEvent = nullptr; 444c29fa5a6Sopenharmony_ci ErrCode status = RET_OK; 445c29fa5a6Sopenharmony_ci 446c29fa5a6Sopenharmony_ci while (!eventQueue_.empty()) { 447c29fa5a6Sopenharmony_ci InputEvt &event = eventQueue_.front(); 448c29fa5a6Sopenharmony_ci expected[event.id].AddEvent(event); 449c29fa5a6Sopenharmony_ci SetupPointerEvent(event, testData); 450c29fa5a6Sopenharmony_ci 451c29fa5a6Sopenharmony_ci PointerEvent::PointerItem pointerItem; 452c29fa5a6Sopenharmony_ci pointerEvent_->GetPointerItem(0, pointerItem); 453c29fa5a6Sopenharmony_ci MMI_HILOGD("pointerEvent_: x = %{public}d y = %{public}d t = %{public}" PRId64, 454c29fa5a6Sopenharmony_ci pointerItem.GetDisplayX(), pointerItem.GetDisplayY(), pointerEvent_->GetActionTime()); 455c29fa5a6Sopenharmony_ci 456c29fa5a6Sopenharmony_ci outEvent = EventResampleHdr->OnEventConsume(pointerEvent_, ctx.frameTime, status); 457c29fa5a6Sopenharmony_ci if ((outEvent != nullptr) && (PointerEvent::POINTER_ACTION_DOWN != outEvent->GetPointerAction())) { 458c29fa5a6Sopenharmony_ci MMI_HILOGE("Unexpected pointer action: %{public}d while %{public}d expected", 459c29fa5a6Sopenharmony_ci outEvent->GetPointerAction(), PointerEvent::POINTER_ACTION_DOWN); 460c29fa5a6Sopenharmony_ci failCount_++; 461c29fa5a6Sopenharmony_ci } else if (outEvent != nullptr) { 462c29fa5a6Sopenharmony_ci EXPECT_EQ(ERR_OK, CheckResults(outEvent, expected, ctx)); 463c29fa5a6Sopenharmony_ci EXPECT_EQ(ERR_OK, status); 464c29fa5a6Sopenharmony_ci } 465c29fa5a6Sopenharmony_ci eventQueue_.pop(); 466c29fa5a6Sopenharmony_ci } 467c29fa5a6Sopenharmony_ci 468c29fa5a6Sopenharmony_ci outEvent = EventResampleHdr->OnEventConsume(nullptr, ctx.frameTime, status); 469c29fa5a6Sopenharmony_ci if (outEvent != nullptr) { 470c29fa5a6Sopenharmony_ci EXPECT_EQ(ERR_OK, CheckResults(outEvent, expected, ctx)); 471c29fa5a6Sopenharmony_ci EXPECT_EQ(ERR_OK, status); 472c29fa5a6Sopenharmony_ci } else { 473c29fa5a6Sopenharmony_ci MMI_HILOGD("NULL Event_: status = %{public}d", status); 474c29fa5a6Sopenharmony_ci } 475c29fa5a6Sopenharmony_ci} 476c29fa5a6Sopenharmony_ci 477c29fa5a6Sopenharmony_civoid EventResampleTest::SendTouchUp(TestData &testData, Context &ctx, std::vector<ExpectedData> &expected) 478c29fa5a6Sopenharmony_ci{ 479c29fa5a6Sopenharmony_ci std::shared_ptr<PointerEvent> outEvent = nullptr; 480c29fa5a6Sopenharmony_ci ErrCode status = RET_OK; 481c29fa5a6Sopenharmony_ci InputEvt touchUp; 482c29fa5a6Sopenharmony_ci 483c29fa5a6Sopenharmony_ci touchUp.Initialize(PointerEvent::POINTER_ACTION_UP, testData, ctx); 484c29fa5a6Sopenharmony_ci expected[touchUp.id].AddEvent(touchUp); 485c29fa5a6Sopenharmony_ci SetupPointerEvent(touchUp, testData); 486c29fa5a6Sopenharmony_ci outEvent = EventResampleHdr->OnEventConsume(pointerEvent_, ctx.frameTime, status); 487c29fa5a6Sopenharmony_ci if (outEvent != nullptr) { 488c29fa5a6Sopenharmony_ci MMI_HILOGD("Pointer Action: %{public}d", outEvent->GetPointerAction()); 489c29fa5a6Sopenharmony_ci EXPECT_EQ(ERR_OK, CheckResults(outEvent, expected, ctx)); 490c29fa5a6Sopenharmony_ci EXPECT_EQ(ERR_OK, status); 491c29fa5a6Sopenharmony_ci } else { 492c29fa5a6Sopenharmony_ci MMI_HILOGD("NULL Event_: status = %{public}d", status); 493c29fa5a6Sopenharmony_ci } 494c29fa5a6Sopenharmony_ci} 495c29fa5a6Sopenharmony_ci 496c29fa5a6Sopenharmony_ci/** 497c29fa5a6Sopenharmony_ci * @tc.name: EventResampleTest_001 498c29fa5a6Sopenharmony_ci * @tc.desc: Test to check single touch without moving events 499c29fa5a6Sopenharmony_ci * @tc.type: FUNC 500c29fa5a6Sopenharmony_ci * @tc.require: 501c29fa5a6Sopenharmony_ci */ 502c29fa5a6Sopenharmony_ciHWTEST_F(EventResampleTest, EventResampleTest_001, TestSize.Level1) 503c29fa5a6Sopenharmony_ci{ 504c29fa5a6Sopenharmony_ci CALL_TEST_DEBUG; 505c29fa5a6Sopenharmony_ci TestData testData = {.framesNum = 5, .fingerNum = 1, .evtNum = 0}; 506c29fa5a6Sopenharmony_ci EXPECT_EQ(EventResampleHdr->GetPointerEvent(), nullptr); 507c29fa5a6Sopenharmony_ci EXPECT_TRUE(DoTest(testData, 1)); 508c29fa5a6Sopenharmony_ci EXPECT_NE(EventResampleHdr->GetPointerEvent(), nullptr); 509c29fa5a6Sopenharmony_ci} 510c29fa5a6Sopenharmony_ci 511c29fa5a6Sopenharmony_ci/** 512c29fa5a6Sopenharmony_ci * @tc.name: EventResampleTest_002 513c29fa5a6Sopenharmony_ci * @tc.desc: Basic test to check events interpolation 514c29fa5a6Sopenharmony_ci * @tc.type: FUNC 515c29fa5a6Sopenharmony_ci * @tc.require: 516c29fa5a6Sopenharmony_ci */ 517c29fa5a6Sopenharmony_ciHWTEST_F(EventResampleTest, EventResampleTest_002, TestSize.Level1) 518c29fa5a6Sopenharmony_ci{ 519c29fa5a6Sopenharmony_ci CALL_TEST_DEBUG; 520c29fa5a6Sopenharmony_ci TestData testData = {.framesNum = 5, .fingerNum = 1, .evtNum = 2}; 521c29fa5a6Sopenharmony_ci EXPECT_TRUE(DoTest(testData, 2)); 522c29fa5a6Sopenharmony_ci} 523c29fa5a6Sopenharmony_ci 524c29fa5a6Sopenharmony_ci/** 525c29fa5a6Sopenharmony_ci * @tc.name: EventResampleTest_003 526c29fa5a6Sopenharmony_ci * @tc.desc: Basic test to check events extrapolation 527c29fa5a6Sopenharmony_ci * @tc.type: FUNC 528c29fa5a6Sopenharmony_ci * @tc.require: 529c29fa5a6Sopenharmony_ci */ 530c29fa5a6Sopenharmony_ciHWTEST_F(EventResampleTest, EventResampleTest_003, TestSize.Level1) 531c29fa5a6Sopenharmony_ci{ 532c29fa5a6Sopenharmony_ci CALL_TEST_DEBUG; 533c29fa5a6Sopenharmony_ci TestData testData = {.framesNum = 5, .fingerNum = 1, .evtNum = 1}; 534c29fa5a6Sopenharmony_ci EXPECT_TRUE(DoTest(testData, 3)); 535c29fa5a6Sopenharmony_ci} 536c29fa5a6Sopenharmony_ci 537c29fa5a6Sopenharmony_ci/** 538c29fa5a6Sopenharmony_ci * @tc.name: EventResampleTest_004 539c29fa5a6Sopenharmony_ci * @tc.desc: Test to check interpolation behavior when event received later then latency time 540c29fa5a6Sopenharmony_ci * @tc.type: FUNC 541c29fa5a6Sopenharmony_ci * @tc.require: 542c29fa5a6Sopenharmony_ci */ 543c29fa5a6Sopenharmony_ciHWTEST_F(EventResampleTest, EventResampleTest_004, TestSize.Level1) 544c29fa5a6Sopenharmony_ci{ 545c29fa5a6Sopenharmony_ci CALL_TEST_DEBUG; 546c29fa5a6Sopenharmony_ci TestData testData = {.framesNum = 5, .fingerNum = 1, .evtNum = 1, .timeDelta = 6000}; 547c29fa5a6Sopenharmony_ci EXPECT_TRUE(DoTest(testData, 4)); 548c29fa5a6Sopenharmony_ci} 549c29fa5a6Sopenharmony_ci 550c29fa5a6Sopenharmony_ci/** 551c29fa5a6Sopenharmony_ci * @tc.name: EventResampleTest_005 552c29fa5a6Sopenharmony_ci * @tc.desc: Test to check case when events intervals less than minimal delta value 553c29fa5a6Sopenharmony_ci * @tc.type: FUNC 554c29fa5a6Sopenharmony_ci * @tc.require: 555c29fa5a6Sopenharmony_ci */ 556c29fa5a6Sopenharmony_ciHWTEST_F(EventResampleTest, EventResampleTest_005, TestSize.Level1) 557c29fa5a6Sopenharmony_ci{ 558c29fa5a6Sopenharmony_ci CALL_TEST_DEBUG; 559c29fa5a6Sopenharmony_ci TestData testData = {.framesNum = 5, .fingerNum = 1, .evtNum = 5, .timeDelta = 1000}; 560c29fa5a6Sopenharmony_ci EXPECT_TRUE(DoTest(testData, 5)); 561c29fa5a6Sopenharmony_ci} 562c29fa5a6Sopenharmony_ci 563c29fa5a6Sopenharmony_ci/** 564c29fa5a6Sopenharmony_ci * @tc.name: EventResampleTest_006 565c29fa5a6Sopenharmony_ci * @tc.desc: Test to check case when many events are received during time frame 566c29fa5a6Sopenharmony_ci * @tc.type: FUNC 567c29fa5a6Sopenharmony_ci * @tc.require: 568c29fa5a6Sopenharmony_ci */ 569c29fa5a6Sopenharmony_ciHWTEST_F(EventResampleTest, EventResampleTest_006, TestSize.Level1) 570c29fa5a6Sopenharmony_ci{ 571c29fa5a6Sopenharmony_ci CALL_TEST_DEBUG; 572c29fa5a6Sopenharmony_ci TestData testData = {.framesNum = 5, .fingerNum = 1, .evtNum = 3}; 573c29fa5a6Sopenharmony_ci EXPECT_TRUE(DoTest(testData, 6)); 574c29fa5a6Sopenharmony_ci} 575c29fa5a6Sopenharmony_ci 576c29fa5a6Sopenharmony_ci/** 577c29fa5a6Sopenharmony_ci * @tc.name: EventResampleTest_OnEventConsume 578c29fa5a6Sopenharmony_ci * @tc.desc: Test OnEventConsume 579c29fa5a6Sopenharmony_ci * @tc.type: FUNC 580c29fa5a6Sopenharmony_ci * @tc.require: 581c29fa5a6Sopenharmony_ci */ 582c29fa5a6Sopenharmony_ciHWTEST_F(EventResampleTest, EventResampleTest_OnEventConsume, TestSize.Level1) 583c29fa5a6Sopenharmony_ci{ 584c29fa5a6Sopenharmony_ci CALL_TEST_DEBUG; 585c29fa5a6Sopenharmony_ci std::shared_ptr<PointerEvent> pointerEvent = PointerEvent::Create(); 586c29fa5a6Sopenharmony_ci ASSERT_NE(pointerEvent, nullptr); 587c29fa5a6Sopenharmony_ci int64_t frameTime = 0; 588c29fa5a6Sopenharmony_ci ErrCode status = ERR_OK; 589c29fa5a6Sopenharmony_ci EventResampleHdr->frameTime_ = 0; 590c29fa5a6Sopenharmony_ci pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_CANCEL); 591c29fa5a6Sopenharmony_ci ASSERT_NE(EventResampleHdr->OnEventConsume(pointerEvent, frameTime, status), nullptr); 592c29fa5a6Sopenharmony_ci} 593c29fa5a6Sopenharmony_ci 594c29fa5a6Sopenharmony_ci/** 595c29fa5a6Sopenharmony_ci * @tc.name: EventResampleTest_InitializeInputEvent 596c29fa5a6Sopenharmony_ci * @tc.desc: Test InitializeInputEvent 597c29fa5a6Sopenharmony_ci * @tc.type: FUNC 598c29fa5a6Sopenharmony_ci * @tc.require: 599c29fa5a6Sopenharmony_ci */ 600c29fa5a6Sopenharmony_ciHWTEST_F(EventResampleTest, EventResampleTest_InitializeInputEvent, TestSize.Level1) 601c29fa5a6Sopenharmony_ci{ 602c29fa5a6Sopenharmony_ci CALL_TEST_DEBUG; 603c29fa5a6Sopenharmony_ci std::shared_ptr<PointerEvent> pointerEvent = nullptr; 604c29fa5a6Sopenharmony_ci int64_t frameTime = 0; 605c29fa5a6Sopenharmony_ci EventResampleHdr->frameTime_ = 0; 606c29fa5a6Sopenharmony_ci ASSERT_EQ(EventResampleHdr->InitializeInputEvent(pointerEvent, frameTime), ERR_OK); 607c29fa5a6Sopenharmony_ci} 608c29fa5a6Sopenharmony_ci 609c29fa5a6Sopenharmony_ci/** 610c29fa5a6Sopenharmony_ci * @tc.name: EventResampleTest_TransformSampleWindowXY 611c29fa5a6Sopenharmony_ci * @tc.desc: Test TransformSampleWindowXY 612c29fa5a6Sopenharmony_ci * @tc.type: FUNC 613c29fa5a6Sopenharmony_ci * @tc.require: 614c29fa5a6Sopenharmony_ci */ 615c29fa5a6Sopenharmony_ciHWTEST_F(EventResampleTest, EventResampleTest_TransformSampleWindowXY, TestSize.Level1) 616c29fa5a6Sopenharmony_ci{ 617c29fa5a6Sopenharmony_ci CALL_TEST_DEBUG; 618c29fa5a6Sopenharmony_ci std::shared_ptr<PointerEvent> pointerEvent = nullptr; 619c29fa5a6Sopenharmony_ci PointerEvent::PointerItem item; 620c29fa5a6Sopenharmony_ci int32_t logicX = 100; 621c29fa5a6Sopenharmony_ci int32_t logicY = 100; 622c29fa5a6Sopenharmony_ci std::pair<int32_t, int32_t> pair { logicX, logicY }; 623c29fa5a6Sopenharmony_ci ASSERT_EQ(EventResampleHdr->TransformSampleWindowXY(pointerEvent, item, logicX, logicY), pair); 624c29fa5a6Sopenharmony_ci} 625c29fa5a6Sopenharmony_ci 626c29fa5a6Sopenharmony_ci/** 627c29fa5a6Sopenharmony_ci * @tc.name: EventResampleTest_UpdatePointerEvent_001 628c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation UpdatePointerEvent 629c29fa5a6Sopenharmony_ci * @tc.type: FUNC 630c29fa5a6Sopenharmony_ci * @tc.require: 631c29fa5a6Sopenharmony_ci */ 632c29fa5a6Sopenharmony_ciHWTEST_F(EventResampleTest, EventResampleTest_UpdatePointerEvent_001, TestSize.Level1) 633c29fa5a6Sopenharmony_ci{ 634c29fa5a6Sopenharmony_ci CALL_TEST_DEBUG; 635c29fa5a6Sopenharmony_ci EventResample::MotionEvent outEvent; 636c29fa5a6Sopenharmony_ci outEvent.actionTime = 100; 637c29fa5a6Sopenharmony_ci outEvent.pointerAction = PointerEvent::POINTER_ACTION_MOVE; 638c29fa5a6Sopenharmony_ci outEvent.actionTime = 5; 639c29fa5a6Sopenharmony_ci outEvent.eventId = 6; 640c29fa5a6Sopenharmony_ci EventResample::Pointer p; 641c29fa5a6Sopenharmony_ci p.coordX = 100; 642c29fa5a6Sopenharmony_ci p.coordY = 10; 643c29fa5a6Sopenharmony_ci p.toolType = 1; 644c29fa5a6Sopenharmony_ci p.id = 6; 645c29fa5a6Sopenharmony_ci outEvent.pointers.insert(std::make_pair(1, p)); 646c29fa5a6Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(EventResampleHdr->UpdatePointerEvent(&outEvent)); 647c29fa5a6Sopenharmony_ci outEvent.pointerAction = PointerEvent::POINTER_ACTION_UP; 648c29fa5a6Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(EventResampleHdr->UpdatePointerEvent(&outEvent)); 649c29fa5a6Sopenharmony_ci outEvent.pointerAction = PointerEvent::POINTER_ACTION_DOWN; 650c29fa5a6Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(EventResampleHdr->UpdatePointerEvent(&outEvent)); 651c29fa5a6Sopenharmony_ci} 652c29fa5a6Sopenharmony_ci 653c29fa5a6Sopenharmony_ci/** 654c29fa5a6Sopenharmony_ci * @tc.name: EventResampleTest_UpdatePointerEvent_002 655c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation UpdatePointerEvent 656c29fa5a6Sopenharmony_ci * @tc.type: FUNC 657c29fa5a6Sopenharmony_ci * @tc.require: 658c29fa5a6Sopenharmony_ci */ 659c29fa5a6Sopenharmony_ciHWTEST_F(EventResampleTest, EventResampleTest_UpdatePointerEvent_002, TestSize.Level1) 660c29fa5a6Sopenharmony_ci{ 661c29fa5a6Sopenharmony_ci CALL_TEST_DEBUG; 662c29fa5a6Sopenharmony_ci EventResample::MotionEvent outEvent; 663c29fa5a6Sopenharmony_ci outEvent.actionTime = 20; 664c29fa5a6Sopenharmony_ci outEvent.pointerAction = 10; 665c29fa5a6Sopenharmony_ci outEvent.actionTime = 2; 666c29fa5a6Sopenharmony_ci outEvent.eventId = 6; 667c29fa5a6Sopenharmony_ci EventResample::Pointer p; 668c29fa5a6Sopenharmony_ci p.coordX = 20; 669c29fa5a6Sopenharmony_ci p.coordY = 30; 670c29fa5a6Sopenharmony_ci p.toolType = 2; 671c29fa5a6Sopenharmony_ci p.id = 3; 672c29fa5a6Sopenharmony_ci outEvent.pointers.insert(std::make_pair(1, p)); 673c29fa5a6Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(EventResampleHdr->UpdatePointerEvent(&outEvent)); 674c29fa5a6Sopenharmony_ci} 675c29fa5a6Sopenharmony_ci 676c29fa5a6Sopenharmony_ci/** 677c29fa5a6Sopenharmony_ci * @tc.name: EventResampleTest_TransformSampleWindowXY_001 678c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation TransformSampleWindowXY 679c29fa5a6Sopenharmony_ci * @tc.type: FUNC 680c29fa5a6Sopenharmony_ci * @tc.require: 681c29fa5a6Sopenharmony_ci */ 682c29fa5a6Sopenharmony_ciHWTEST_F(EventResampleTest, EventResampleTest_TransformSampleWindowXY_001, TestSize.Level1) 683c29fa5a6Sopenharmony_ci{ 684c29fa5a6Sopenharmony_ci CALL_TEST_DEBUG; 685c29fa5a6Sopenharmony_ci std::shared_ptr<PointerEvent> pointerEvent = PointerEvent::Create(); 686c29fa5a6Sopenharmony_ci ASSERT_NE(pointerEvent, nullptr); 687c29fa5a6Sopenharmony_ci PointerEvent::PointerItem item; 688c29fa5a6Sopenharmony_ci item.SetPointerId(0); 689c29fa5a6Sopenharmony_ci item.SetDownTime(100); 690c29fa5a6Sopenharmony_ci item.SetToolDisplayX(90); 691c29fa5a6Sopenharmony_ci item.SetToolDisplayY(90); 692c29fa5a6Sopenharmony_ci item.SetToolWindowX(50); 693c29fa5a6Sopenharmony_ci item.SetToolWindowY(50); 694c29fa5a6Sopenharmony_ci item.SetToolWidth(30); 695c29fa5a6Sopenharmony_ci item.SetToolHeight(30); 696c29fa5a6Sopenharmony_ci item.SetLongAxis(100); 697c29fa5a6Sopenharmony_ci item.SetShortAxis(20); 698c29fa5a6Sopenharmony_ci item.SetToolType(2); 699c29fa5a6Sopenharmony_ci item.SetTargetWindowId(0); 700c29fa5a6Sopenharmony_ci pointerEvent->AddPointerItem(item); 701c29fa5a6Sopenharmony_ci int32_t logicX = 100; 702c29fa5a6Sopenharmony_ci int32_t logicY = 100; 703c29fa5a6Sopenharmony_ci std::shared_ptr<InputEvent> inputEvent = InputEvent::Create(); 704c29fa5a6Sopenharmony_ci EXPECT_NE(inputEvent, nullptr); 705c29fa5a6Sopenharmony_ci inputEvent->targetDisplayId_ = 10; 706c29fa5a6Sopenharmony_ci inputEvent->targetWindowId_ = 10; 707c29fa5a6Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(EventResampleHdr->TransformSampleWindowXY(pointerEvent, item, logicX, logicY)); 708c29fa5a6Sopenharmony_ci WindowInfo window; 709c29fa5a6Sopenharmony_ci window.transform.push_back(1.0f); 710c29fa5a6Sopenharmony_ci window.transform.push_back(2.0f); 711c29fa5a6Sopenharmony_ci window.transform.push_back(3.0f); 712c29fa5a6Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(EventResampleHdr->TransformSampleWindowXY(pointerEvent, item, logicX, logicY)); 713c29fa5a6Sopenharmony_ci} 714c29fa5a6Sopenharmony_ci 715c29fa5a6Sopenharmony_ci/** 716c29fa5a6Sopenharmony_ci * @tc.name: EventResampleTest_TransformSampleWindowXY_002 717c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation TransformSampleWindowXY 718c29fa5a6Sopenharmony_ci * @tc.type: FUNC 719c29fa5a6Sopenharmony_ci * @tc.require: 720c29fa5a6Sopenharmony_ci */ 721c29fa5a6Sopenharmony_ciHWTEST_F(EventResampleTest, EventResampleTest_TransformSampleWindowXY_002, TestSize.Level1) 722c29fa5a6Sopenharmony_ci{ 723c29fa5a6Sopenharmony_ci CALL_TEST_DEBUG; 724c29fa5a6Sopenharmony_ci std::shared_ptr<PointerEvent> pointerEvent = PointerEvent::Create(); 725c29fa5a6Sopenharmony_ci ASSERT_NE(pointerEvent, nullptr); 726c29fa5a6Sopenharmony_ci PointerEvent::PointerItem item; 727c29fa5a6Sopenharmony_ci item.SetPointerId(1); 728c29fa5a6Sopenharmony_ci item.SetDownTime(10); 729c29fa5a6Sopenharmony_ci item.SetToolDisplayX(9); 730c29fa5a6Sopenharmony_ci item.SetToolDisplayY(8); 731c29fa5a6Sopenharmony_ci item.SetToolWindowX(7); 732c29fa5a6Sopenharmony_ci item.SetToolWindowY(6); 733c29fa5a6Sopenharmony_ci item.SetToolWidth(5); 734c29fa5a6Sopenharmony_ci item.SetToolHeight(4); 735c29fa5a6Sopenharmony_ci item.SetLongAxis(3); 736c29fa5a6Sopenharmony_ci item.SetShortAxis(2); 737c29fa5a6Sopenharmony_ci item.SetToolType(1); 738c29fa5a6Sopenharmony_ci item.SetTargetWindowId(0); 739c29fa5a6Sopenharmony_ci pointerEvent->AddPointerItem(item); 740c29fa5a6Sopenharmony_ci int32_t logicX = 10; 741c29fa5a6Sopenharmony_ci int32_t logicY = 20; 742c29fa5a6Sopenharmony_ci std::shared_ptr<InputEvent> inputEvent = InputEvent::Create(); 743c29fa5a6Sopenharmony_ci EXPECT_NE(inputEvent, nullptr); 744c29fa5a6Sopenharmony_ci inputEvent->targetDisplayId_ = 20; 745c29fa5a6Sopenharmony_ci inputEvent->targetWindowId_ = 10; 746c29fa5a6Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(EventResampleHdr->TransformSampleWindowXY(pointerEvent, item, logicX, logicY)); 747c29fa5a6Sopenharmony_ci} 748c29fa5a6Sopenharmony_ci 749c29fa5a6Sopenharmony_ci/** 750c29fa5a6Sopenharmony_ci * @tc.name: EventResampleTest_ConsumeBatch_001 751c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation ConsumeBatch 752c29fa5a6Sopenharmony_ci * @tc.type: FUNC 753c29fa5a6Sopenharmony_ci * @tc.require: 754c29fa5a6Sopenharmony_ci */ 755c29fa5a6Sopenharmony_ciHWTEST_F(EventResampleTest, EventResampleTest_ConsumeBatch_001, TestSize.Level1) 756c29fa5a6Sopenharmony_ci{ 757c29fa5a6Sopenharmony_ci CALL_TEST_DEBUG; 758c29fa5a6Sopenharmony_ci int64_t frameTime = 5; 759c29fa5a6Sopenharmony_ci EventResample::MotionEvent** outEvent = new EventResample::MotionEvent*[3]; 760c29fa5a6Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(EventResampleHdr->ConsumeBatch(frameTime, outEvent)); 761c29fa5a6Sopenharmony_ci frameTime = -4; 762c29fa5a6Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(EventResampleHdr->ConsumeBatch(frameTime, outEvent)); 763c29fa5a6Sopenharmony_ci} 764c29fa5a6Sopenharmony_ci 765c29fa5a6Sopenharmony_ci/** 766c29fa5a6Sopenharmony_ci * @tc.name: EventResampleTest_ResampleTouchState_001 767c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation ResampleTouchState 768c29fa5a6Sopenharmony_ci * @tc.type: FUNC 769c29fa5a6Sopenharmony_ci * @tc.require: 770c29fa5a6Sopenharmony_ci */ 771c29fa5a6Sopenharmony_ciHWTEST_F(EventResampleTest, EventResampleTest_ResampleTouchState_001, TestSize.Level1) 772c29fa5a6Sopenharmony_ci{ 773c29fa5a6Sopenharmony_ci CALL_TEST_DEBUG; 774c29fa5a6Sopenharmony_ci int64_t sampleTime = 5; 775c29fa5a6Sopenharmony_ci EventResample::MotionEvent event; 776c29fa5a6Sopenharmony_ci EventResample::MotionEvent next; 777c29fa5a6Sopenharmony_ci event.actionTime = 10; 778c29fa5a6Sopenharmony_ci event.pointerAction = 20; 779c29fa5a6Sopenharmony_ci event.actionTime = 5; 780c29fa5a6Sopenharmony_ci event.eventId = 6; 781c29fa5a6Sopenharmony_ci next.actionTime = 20; 782c29fa5a6Sopenharmony_ci next.pointerAction = 30; 783c29fa5a6Sopenharmony_ci next.actionTime = 8; 784c29fa5a6Sopenharmony_ci next.eventId = 9; 785c29fa5a6Sopenharmony_ci EventResampleHdr->resampleTouch_ = false; 786c29fa5a6Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(EventResampleHdr->ResampleTouchState(sampleTime, &event, &next)); 787c29fa5a6Sopenharmony_ci EventResampleHdr->resampleTouch_ = true; 788c29fa5a6Sopenharmony_ci event.sourceType = PointerEvent::SOURCE_TYPE_TOUCHPAD; 789c29fa5a6Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(EventResampleHdr->ResampleTouchState(sampleTime, &event, &next)); 790c29fa5a6Sopenharmony_ci event.sourceType = PointerEvent::SOURCE_TYPE_TOUCHSCREEN; 791c29fa5a6Sopenharmony_ci event.pointerAction = PointerEvent::POINTER_ACTION_UP; 792c29fa5a6Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(EventResampleHdr->ResampleTouchState(sampleTime, &event, &next)); 793c29fa5a6Sopenharmony_ci event.pointerAction = PointerEvent::POINTER_ACTION_MOVE; 794c29fa5a6Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(EventResampleHdr->ResampleTouchState(sampleTime, &event, &next)); 795c29fa5a6Sopenharmony_ci} 796c29fa5a6Sopenharmony_ci 797c29fa5a6Sopenharmony_ci/** 798c29fa5a6Sopenharmony_ci * @tc.name: EventResampleTest_ResampleTouchState_002 799c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation ResampleTouchState 800c29fa5a6Sopenharmony_ci * @tc.type: FUNC 801c29fa5a6Sopenharmony_ci * @tc.require: 802c29fa5a6Sopenharmony_ci */ 803c29fa5a6Sopenharmony_ciHWTEST_F(EventResampleTest, EventResampleTest_ResampleTouchState_002, TestSize.Level1) 804c29fa5a6Sopenharmony_ci{ 805c29fa5a6Sopenharmony_ci CALL_TEST_DEBUG; 806c29fa5a6Sopenharmony_ci int64_t sampleTime = 7; 807c29fa5a6Sopenharmony_ci EventResample::MotionEvent event; 808c29fa5a6Sopenharmony_ci EventResample::MotionEvent next; 809c29fa5a6Sopenharmony_ci event.actionTime = 1; 810c29fa5a6Sopenharmony_ci event.pointerAction = 2; 811c29fa5a6Sopenharmony_ci event.actionTime = 2; 812c29fa5a6Sopenharmony_ci event.eventId = 4; 813c29fa5a6Sopenharmony_ci next.actionTime = 5; 814c29fa5a6Sopenharmony_ci next.pointerAction = 6; 815c29fa5a6Sopenharmony_ci next.actionTime = 7; 816c29fa5a6Sopenharmony_ci next.eventId = 8; 817c29fa5a6Sopenharmony_ci EventResampleHdr->resampleTouch_ = true; 818c29fa5a6Sopenharmony_ci event.sourceType = PointerEvent::SOURCE_TYPE_TOUCHSCREEN; 819c29fa5a6Sopenharmony_ci event.pointerAction = PointerEvent::POINTER_ACTION_MOVE; 820c29fa5a6Sopenharmony_ci int32_t deviceId = 9; 821c29fa5a6Sopenharmony_ci int32_t source = 8; 822c29fa5a6Sopenharmony_ci EventResample::TouchState ts; 823c29fa5a6Sopenharmony_ci ts.deviceId = 9; 824c29fa5a6Sopenharmony_ci ts.source = 8; 825c29fa5a6Sopenharmony_ci ts.historyCurrent = 3; 826c29fa5a6Sopenharmony_ci ts.historySize = 4; 827c29fa5a6Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(EventResampleHdr->ResampleTouchState(sampleTime, &event, &next)); 828c29fa5a6Sopenharmony_ci deviceId = 15; 829c29fa5a6Sopenharmony_ci source = 13; 830c29fa5a6Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(EventResampleHdr->ResampleTouchState(sampleTime, &event, &next)); 831c29fa5a6Sopenharmony_ci} 832c29fa5a6Sopenharmony_ci 833c29fa5a6Sopenharmony_ci/** 834c29fa5a6Sopenharmony_ci * @tc.name: EventResampleTest_ResampleCoordinates_001 835c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation ResampleCoordinates 836c29fa5a6Sopenharmony_ci * @tc.type: FUNC 837c29fa5a6Sopenharmony_ci * @tc.require: 838c29fa5a6Sopenharmony_ci */ 839c29fa5a6Sopenharmony_ciHWTEST_F(EventResampleTest, EventResampleTest_ResampleCoordinates_001, TestSize.Level1) 840c29fa5a6Sopenharmony_ci{ 841c29fa5a6Sopenharmony_ci CALL_TEST_DEBUG; 842c29fa5a6Sopenharmony_ci int64_t sampleTime = 6; 843c29fa5a6Sopenharmony_ci EventResample::MotionEvent event; 844c29fa5a6Sopenharmony_ci EventResample::TouchState touchState; 845c29fa5a6Sopenharmony_ci EventResample::History current; 846c29fa5a6Sopenharmony_ci EventResample::History other; 847c29fa5a6Sopenharmony_ci float alpha = 1.0; 848c29fa5a6Sopenharmony_ci EventResample::Pointer p; 849c29fa5a6Sopenharmony_ci p.coordX = 20; 850c29fa5a6Sopenharmony_ci p.coordY = 30; 851c29fa5a6Sopenharmony_ci p.toolType = 2; 852c29fa5a6Sopenharmony_ci p.id = 5; 853c29fa5a6Sopenharmony_ci event.pointers.insert(std::make_pair(1, p)); 854c29fa5a6Sopenharmony_ci EventResample::TouchState ts; 855c29fa5a6Sopenharmony_ci ts.deviceId = 5; 856c29fa5a6Sopenharmony_ci ts.source = 2; 857c29fa5a6Sopenharmony_ci ts.historyCurrent = 3; 858c29fa5a6Sopenharmony_ci ts.historySize = 4; 859c29fa5a6Sopenharmony_ci EventResampleHdr->touchStates_.push_back(ts); 860c29fa5a6Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(EventResampleHdr->ResampleCoordinates(sampleTime, &event, touchState, ¤t, 861c29fa5a6Sopenharmony_ci &other, alpha)); 862c29fa5a6Sopenharmony_ci} 863c29fa5a6Sopenharmony_ci 864c29fa5a6Sopenharmony_ci/** 865c29fa5a6Sopenharmony_ci * @tc.name: EventResampleTest_ResampleCoordinates_002 866c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation ResampleCoordinates 867c29fa5a6Sopenharmony_ci * @tc.type: FUNC 868c29fa5a6Sopenharmony_ci * @tc.require: 869c29fa5a6Sopenharmony_ci */ 870c29fa5a6Sopenharmony_ciHWTEST_F(EventResampleTest, EventResampleTest_ResampleCoordinates_002, TestSize.Level1) 871c29fa5a6Sopenharmony_ci{ 872c29fa5a6Sopenharmony_ci CALL_TEST_DEBUG; 873c29fa5a6Sopenharmony_ci int64_t sampleTime = 2; 874c29fa5a6Sopenharmony_ci EventResample::MotionEvent event; 875c29fa5a6Sopenharmony_ci EventResample::TouchState touchState; 876c29fa5a6Sopenharmony_ci EventResample::History current; 877c29fa5a6Sopenharmony_ci EventResample::History other; 878c29fa5a6Sopenharmony_ci float alpha = 5.0; 879c29fa5a6Sopenharmony_ci EventResample::Pointer p; 880c29fa5a6Sopenharmony_ci p.coordX = 5; 881c29fa5a6Sopenharmony_ci p.coordY = 8; 882c29fa5a6Sopenharmony_ci p.toolType = 9; 883c29fa5a6Sopenharmony_ci p.id = 2; 884c29fa5a6Sopenharmony_ci event.pointers.insert(std::make_pair(1, p)); 885c29fa5a6Sopenharmony_ci EventResample::TouchState ts; 886c29fa5a6Sopenharmony_ci ts.deviceId = 3; 887c29fa5a6Sopenharmony_ci ts.source = 4; 888c29fa5a6Sopenharmony_ci ts.historyCurrent = 7; 889c29fa5a6Sopenharmony_ci ts.historySize = 5; 890c29fa5a6Sopenharmony_ci EventResampleHdr->touchStates_.push_back(ts); 891c29fa5a6Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(EventResampleHdr->ResampleCoordinates(sampleTime, &event, touchState, ¤t, 892c29fa5a6Sopenharmony_ci &other, alpha)); 893c29fa5a6Sopenharmony_ci} 894c29fa5a6Sopenharmony_ci 895c29fa5a6Sopenharmony_ci/** 896c29fa5a6Sopenharmony_ci * @tc.name: EventResampleTest_FindBatch_001 897c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation FindBatch 898c29fa5a6Sopenharmony_ci * @tc.type: FUNC 899c29fa5a6Sopenharmony_ci * @tc.require: 900c29fa5a6Sopenharmony_ci */ 901c29fa5a6Sopenharmony_ciHWTEST_F(EventResampleTest, EventResampleTest_FindBatch_001, TestSize.Level1) 902c29fa5a6Sopenharmony_ci{ 903c29fa5a6Sopenharmony_ci CALL_TEST_DEBUG; 904c29fa5a6Sopenharmony_ci int32_t deviceId = 1; 905c29fa5a6Sopenharmony_ci int32_t source = 3; 906c29fa5a6Sopenharmony_ci EventResample::MotionEvent motionEvent; 907c29fa5a6Sopenharmony_ci motionEvent.deviceId = 1; 908c29fa5a6Sopenharmony_ci motionEvent.sourceType = 3; 909c29fa5a6Sopenharmony_ci EventResample::Batch batch; 910c29fa5a6Sopenharmony_ci batch.samples.push_back(motionEvent); 911c29fa5a6Sopenharmony_ci EventResampleHdr->batches_.push_back(batch); 912c29fa5a6Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(EventResampleHdr->FindBatch(deviceId, source)); 913c29fa5a6Sopenharmony_ci deviceId = 5; 914c29fa5a6Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(EventResampleHdr->FindBatch(deviceId, source)); 915c29fa5a6Sopenharmony_ci source = 6; 916c29fa5a6Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(EventResampleHdr->FindBatch(deviceId, source)); 917c29fa5a6Sopenharmony_ci} 918c29fa5a6Sopenharmony_ci 919c29fa5a6Sopenharmony_ci/** 920c29fa5a6Sopenharmony_ci * @tc.name: EventResampleTest_FindTouchState_001 921c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation FindTouchState 922c29fa5a6Sopenharmony_ci * @tc.type: FUNC 923c29fa5a6Sopenharmony_ci * @tc.require: 924c29fa5a6Sopenharmony_ci */ 925c29fa5a6Sopenharmony_ciHWTEST_F(EventResampleTest, EventResampleTest_FindTouchState_001, TestSize.Level1) 926c29fa5a6Sopenharmony_ci{ 927c29fa5a6Sopenharmony_ci CALL_TEST_DEBUG; 928c29fa5a6Sopenharmony_ci int32_t deviceId = 1; 929c29fa5a6Sopenharmony_ci int32_t source = 2; 930c29fa5a6Sopenharmony_ci EventResample::TouchState ts; 931c29fa5a6Sopenharmony_ci ts.deviceId = 1; 932c29fa5a6Sopenharmony_ci ts.source = 2; 933c29fa5a6Sopenharmony_ci ts.historyCurrent = 3; 934c29fa5a6Sopenharmony_ci ts.historySize = 4; 935c29fa5a6Sopenharmony_ci EventResampleHdr->touchStates_.push_back(ts); 936c29fa5a6Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(EventResampleHdr->FindTouchState(deviceId, source)); 937c29fa5a6Sopenharmony_ci deviceId = 5; 938c29fa5a6Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(EventResampleHdr->FindTouchState(deviceId, source)); 939c29fa5a6Sopenharmony_ci source = 6; 940c29fa5a6Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(EventResampleHdr->FindTouchState(deviceId, source)); 941c29fa5a6Sopenharmony_ci} 942c29fa5a6Sopenharmony_ci 943c29fa5a6Sopenharmony_ci/** 944c29fa5a6Sopenharmony_ci * @tc.name: EventResampleTest_RewriteMessage_001 945c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation RewriteMessage 946c29fa5a6Sopenharmony_ci * @tc.type: FUNC 947c29fa5a6Sopenharmony_ci * @tc.require: 948c29fa5a6Sopenharmony_ci */ 949c29fa5a6Sopenharmony_ciHWTEST_F(EventResampleTest, EventResampleTest_RewriteMessage_001, TestSize.Level1) 950c29fa5a6Sopenharmony_ci{ 951c29fa5a6Sopenharmony_ci CALL_TEST_DEBUG; 952c29fa5a6Sopenharmony_ci EventResample::TouchState state; 953c29fa5a6Sopenharmony_ci EventResample::MotionEvent event; 954c29fa5a6Sopenharmony_ci EventResample::Pointer p; 955c29fa5a6Sopenharmony_ci p.coordX = 20; 956c29fa5a6Sopenharmony_ci p.coordY = 30; 957c29fa5a6Sopenharmony_ci p.toolType = 2; 958c29fa5a6Sopenharmony_ci p.id = 5; 959c29fa5a6Sopenharmony_ci event.pointers.insert(std::make_pair(1, p)); 960c29fa5a6Sopenharmony_ci EventResample::TouchState ts; 961c29fa5a6Sopenharmony_ci ts.deviceId = 3; 962c29fa5a6Sopenharmony_ci ts.source = 2; 963c29fa5a6Sopenharmony_ci ts.historyCurrent = 3; 964c29fa5a6Sopenharmony_ci ts.historySize = 4; 965c29fa5a6Sopenharmony_ci EventResampleHdr->touchStates_.push_back(ts); 966c29fa5a6Sopenharmony_ci event.actionTime = 10; 967c29fa5a6Sopenharmony_ci state.lastResample.actionTime = 5; 968c29fa5a6Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(EventResampleHdr->RewriteMessage(state, event)); 969c29fa5a6Sopenharmony_ci event.actionTime = 5; 970c29fa5a6Sopenharmony_ci state.lastResample.actionTime = 10; 971c29fa5a6Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(EventResampleHdr->RewriteMessage(state, event)); 972c29fa5a6Sopenharmony_ci} 973c29fa5a6Sopenharmony_ci} // namespace MMI 974c29fa5a6Sopenharmony_ci} // namespace OHOS 975