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 "search_base.h" 17 namespace OHOS::Ace::NG { 18 19 namespace {} // namespace 20 21 class SearchTestTwoNg : public SearchBases { 22 public: 23 }; 24 25 /** 26 * @tc.name: testOnEditChange001 27 * @tc.desc: Test Search OnEditChange 28 * @tc.type: FUNC 29 */ 30 HWTEST_F(SearchTestTwoNg, testOnEditChange001, TestSize.Level1) 31 { 32 /** 33 * @tc.steps: Create Text filed node 34 */ 35 SearchModelNG searchModelInstance; 36 searchModelInstance.Create(DEFAULT_TEXT, PLACEHOLDER, SEARCH_SVG); 37 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 38 auto textFieldChild = AceType::DynamicCast<FrameNode>(frameNode->GetChildren().front()); 39 auto textFieldPattern = textFieldChild->GetPattern<TextFieldPattern>(); 40 auto textFieldEventHub = textFieldChild->GetEventHub<TextFieldEventHub>(); __anonf251a1430202(bool isChanged) 41 textFieldEventHub->SetOnEditChanged([](bool isChanged) { 42 isChanged = true; 43 }); 44 /** 45 * @tc.expected: Check if the text patterns for the input box are compliant 46 */ 47 EXPECT_EQ(textFieldPattern->GetTextValue().compare(DEFAULT_TEXT), 0); 48 } 49 50 /** 51 * @tc.name: testTextIndent001 52 * @tc.desc: Test Search input TextIndent 53 * @tc.type: FUNC 54 */ 55 HWTEST_F(SearchTestTwoNg, testTextIndent001, TestSize.Level1) 56 { 57 /** 58 * @tc.steps: Create Text filed node 59 */ 60 SearchModelNG searchModelInstance; 61 searchModelInstance.Create(DEFAULT_TEXT, PLACEHOLDER, SEARCH_SVG); 62 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 63 auto textFieldChild = AceType::DynamicCast<FrameNode>(frameNode->GetChildren().front()); 64 auto layoutProperty = textFieldChild->GetLayoutProperty<TextFieldLayoutProperty>(); 65 /** 66 * @tc.step: step2. Set textIndent 67 */ 68 layoutProperty->UpdateTextIndent(DEFAULT_INDENT_SIZE); 69 frameNode->MarkModifyDone(); 70 EXPECT_EQ(layoutProperty->GetTextIndent(), DEFAULT_INDENT_SIZE); 71 } 72 73 /** 74 * @tc.name: testFontColor001 75 * @tc.desc: test search fontColor 76 * @tc.type: FUNC 77 */ 78 HWTEST_F(SearchTestTwoNg, testFontColor001, TestSize.Level1) 79 { 80 /** 81 * @tc.steps: Create Text filed node 82 */ 83 SearchModelNG searchModelInstance; 84 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 85 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 86 auto textFieldChild = AceType::DynamicCast<FrameNode>(frameNode->GetChildren().front()); 87 auto layoutProperty = textFieldChild->GetLayoutProperty<TextFieldLayoutProperty>(); 88 /** 89 * @tc.step: step2. Set fontColor 90 */ 91 searchModelInstance.SetTextColor(Color::BLUE); 92 frameNode->MarkModifyDone(); 93 EXPECT_EQ(layoutProperty->GetTextColor(), Color::BLUE); 94 /** 95 * @tc.step: step3. Set fontColor 96 */ 97 searchModelInstance.SetTextColor(Color::RED); 98 frameNode->MarkModifyDone(); 99 EXPECT_EQ(layoutProperty->GetTextColor(), Color::RED); 100 } 101 102 /** 103 * @tc.name: testTextAlign001 104 * @tc.desc: test search textAlign 105 * @tc.type: FUNC 106 */ 107 HWTEST_F(SearchTestTwoNg, testTextAlign001, TestSize.Level1) 108 { 109 /** 110 * @tc.step: step1. create frameNode and textFieldLayoutProperty. 111 */ 112 SearchModelNG searchModelInstance; 113 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 114 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 115 auto textFieldChild = AceType::DynamicCast<FrameNode>(frameNode->GetChildren().front()); 116 auto textFieldLayoutProperty = textFieldChild->GetLayoutProperty<TextFieldLayoutProperty>(); 117 /** 118 * @tc.step: step2. Set textAlign 119 */ 120 textFieldLayoutProperty->UpdateTextAlign(TextAlign::LEFT); 121 frameNode->MarkModifyDone(); 122 EXPECT_EQ(textFieldLayoutProperty->GetTextAlign(), TextAlign::LEFT); 123 /** 124 * @tc.step: step3. Set textAlign 125 */ 126 textFieldLayoutProperty->UpdateTextAlign(TextAlign::RIGHT); 127 frameNode->MarkModifyDone(); 128 EXPECT_EQ(textFieldLayoutProperty->GetTextAlign(), TextAlign::RIGHT); 129 /** 130 * @tc.step: step4. Set textAlign 131 */ 132 textFieldLayoutProperty->UpdateTextAlign(TextAlign::CENTER); 133 frameNode->MarkModifyDone(); 134 EXPECT_EQ(textFieldLayoutProperty->GetTextAlign(), TextAlign::CENTER); 135 /** 136 * @tc.step: step5. Set textAlign 137 */ 138 textFieldLayoutProperty->UpdateTextAlign(TextAlign::JUSTIFY); 139 frameNode->MarkModifyDone(); 140 EXPECT_EQ(textFieldLayoutProperty->GetTextAlign(), TextAlign::JUSTIFY); 141 /** 142 * @tc.step: step6. Set textAlign 143 */ 144 textFieldLayoutProperty->UpdateTextAlign(TextAlign::START); 145 frameNode->MarkModifyDone(); 146 EXPECT_EQ(textFieldLayoutProperty->GetTextAlign(), TextAlign::START); 147 /** 148 * @tc.step: step7. Set textAlign 149 */ 150 textFieldLayoutProperty->UpdateTextAlign(TextAlign::END); 151 frameNode->MarkModifyDone(); 152 EXPECT_EQ(textFieldLayoutProperty->GetTextAlign(), TextAlign::END); 153 } 154 155 /** 156 * @tc.name: testCancelButton001 157 * @tc.desc: test search cancelButton 158 * @tc.type: FUNC 159 */ 160 HWTEST_F(SearchTestTwoNg, testCancelButton001, TestSize.Level1) 161 { 162 /** 163 * @tc.steps: Create Text filed node 164 */ 165 SearchModelNG searchModelInstance; 166 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 167 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 168 auto buttonHost = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(CANCEL_BUTTON_INDEX)); 169 auto cancelButtonRenderContext = buttonHost->GetRenderContext(); 170 auto searchLayoutProperty = frameNode->GetLayoutProperty<SearchLayoutProperty>(); 171 /** 172 * @tc.step: step2. Set cancelButton 173 */ 174 searchModelInstance.SetCancelButtonStyle(CancelButtonStyle::CONSTANT); 175 frameNode->MarkModifyDone(); 176 EXPECT_EQ(searchLayoutProperty->GetCancelButtonStyle(), CancelButtonStyle::CONSTANT); 177 EXPECT_EQ(cancelButtonRenderContext->GetOpacity(), 1.0); 178 /** 179 * @tc.step: step3. Set cancelButton 180 */ 181 searchModelInstance.SetCancelButtonStyle(CancelButtonStyle::INVISIBLE); 182 frameNode->MarkModifyDone(); 183 EXPECT_EQ(searchLayoutProperty->GetCancelButtonStyle(), CancelButtonStyle::INVISIBLE); 184 EXPECT_EQ(cancelButtonRenderContext->GetOpacity(), 0.0); 185 } 186 187 /** 188 * @tc.name: Pattern016 189 * @tc.desc: test OnKeyEvent for arrow key presses and with text 190 * @tc.type: FUNC 191 */ 192 HWTEST_F(SearchTestTwoNg, Pattern016, TestSize.Level1) 193 { 194 /** 195 * @tc.step: step1. get frameNode and pattern. 196 */ 197 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 198 ASSERT_NE(frameNode, nullptr); 199 auto pattern = frameNode->GetPattern<SearchPattern>(); 200 ASSERT_NE(pattern, nullptr); 201 auto textFieldFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(TEXTFIELD_INDEX)); 202 ASSERT_NE(textFieldFrameNode, nullptr); 203 auto textFieldPattern = textFieldFrameNode->GetPattern<TextFieldPattern>(); 204 ASSERT_NE(textFieldPattern, nullptr); 205 textFieldPattern->UpdateEditingValue("Text", 0); 206 textFieldPattern->HandleOnSelectAll(true); 207 KeyEvent keyEvent; 208 keyEvent.action = KeyAction::DOWN; 209 /** 210 * @tc.step: step2. call OnKeyEvent(). 211 * @tc.expected: focusChoice_ = FocusChoice::CANCEL_BUTTON. 212 */ 213 keyEvent.code = KeyCode::KEY_DPAD_RIGHT; 214 pattern->focusChoice_ = SearchPattern::FocusChoice::SEARCH; 215 pattern->cancelButtonSize_ = SizeF(100.0, 50.0); 216 pattern->isSearchButtonEnabled_ = true; 217 pattern->OnKeyEvent(keyEvent); 218 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::CANCEL_BUTTON); 219 220 /** 221 * @tc.step: step3. call OnKeyEvent(). 222 * @tc.expected: focusChoice_ = FocusChoice::SEARCH_BUTTON. 223 */ 224 keyEvent.code = KeyCode::KEY_DPAD_RIGHT; 225 pattern->isSearchButtonEnabled_ = true; 226 pattern->OnKeyEvent(keyEvent); 227 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::SEARCH_BUTTON); 228 229 /** 230 * @tc.step: step4. call OnKeyEvent(). 231 * @tc.expected: focusChoice_ = FocusChoice::CANCEL_BUTTON. 232 */ 233 keyEvent.code = KeyCode::KEY_DPAD_LEFT; 234 pattern->OnKeyEvent(keyEvent); 235 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::CANCEL_BUTTON); 236 237 /** 238 * @tc.step: step5. call OnKeyEvent(). 239 * @tc.expected: focusChoice_ = FocusChoice::SEARCH. 240 */ 241 keyEvent.code = KeyCode::KEY_DPAD_LEFT; 242 pattern->OnKeyEvent(keyEvent); 243 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::SEARCH); 244 } 245 246 /** 247 * @tc.name: Pattern017 248 * @tc.desc: test OnKeyEvent for arrow key presses and without text 249 * @tc.type: FUNC 250 */ 251 HWTEST_F(SearchTestTwoNg, Pattern017, TestSize.Level1) 252 { 253 /** 254 * @tc.step: step1. get frameNode and pattern. 255 */ 256 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 257 ASSERT_NE(frameNode, nullptr); 258 auto pattern = frameNode->GetPattern<SearchPattern>(); 259 ASSERT_NE(pattern, nullptr); 260 auto textFieldFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(TEXTFIELD_INDEX)); 261 ASSERT_NE(textFieldFrameNode, nullptr); 262 auto textFieldPattern = textFieldFrameNode->GetPattern<TextFieldPattern>(); 263 ASSERT_NE(textFieldPattern, nullptr); 264 textFieldPattern->UpdateEditingValue("", 0); 265 KeyEvent keyEvent; 266 keyEvent.action = KeyAction::DOWN; 267 /** 268 * @tc.step: step2. call OnKeyEvent(). 269 * @tc.expected: focusChoice_ = FocusChoice::SEARCH_BUTTON. 270 */ 271 keyEvent.code = KeyCode::KEY_DPAD_RIGHT; 272 pattern->focusChoice_ = SearchPattern::FocusChoice::SEARCH; 273 pattern->cancelButtonSize_ = SizeF(0, 0); 274 pattern->isSearchButtonEnabled_ = true; 275 pattern->OnKeyEvent(keyEvent); 276 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::SEARCH_BUTTON); 277 278 /** 279 * @tc.step: step3. call OnKeyEvent(). 280 * @tc.expected: focusChoice_ = FocusChoice::SEARCH. 281 */ 282 keyEvent.code = KeyCode::KEY_DPAD_LEFT; 283 pattern->isSearchButtonEnabled_ = true; 284 pattern->OnKeyEvent(keyEvent); 285 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::SEARCH); 286 } 287 288 /** 289 * @tc.name: Pattern018 290 * @tc.desc: test OnKeyEvent for Tab/Shift+Tab key presses and with text 291 * @tc.type: FUNC 292 */ 293 HWTEST_F(SearchTestTwoNg, Pattern018, TestSize.Level1) 294 { 295 /** 296 * @tc.step: step1. get frameNode and pattern. 297 */ 298 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 299 ASSERT_NE(frameNode, nullptr); 300 auto pattern = frameNode->GetPattern<SearchPattern>(); 301 ASSERT_NE(pattern, nullptr); 302 303 auto textFieldFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(TEXTFIELD_INDEX)); 304 ASSERT_NE(textFieldFrameNode, nullptr); 305 auto textFieldPattern = textFieldFrameNode->GetPattern<TextFieldPattern>(); 306 ASSERT_NE(textFieldPattern, nullptr); 307 308 textFieldPattern->UpdateEditingValue("Text", 0); 309 TimeStamp timeStamp; 310 KeyEvent keyEvent(KeyCode::KEY_TAB, KeyAction::DOWN, {KeyCode::KEY_TAB}, 0, timeStamp, 311 0, 0, SourceType::KEYBOARD, {}); 312 313 /** 314 * @tc.step: step2. call OnKeyEvent(). 315 * @tc.expected: focusChoice_ = FocusChoice::CANCEL_BUTTON. 316 */ 317 pattern->focusChoice_ = SearchPattern::FocusChoice::SEARCH; 318 pattern->cancelButtonSize_ = SizeF(100.0, 50.0); 319 pattern->OnKeyEvent(keyEvent); 320 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::CANCEL_BUTTON); 321 322 /** 323 * @tc.step: step3. call OnKeyEvent(). 324 * @tc.expected: focusChoice_ = FocusChoice::SEARCH_BUTTON. 325 */ 326 pattern->isSearchButtonEnabled_ = true; 327 pattern->OnKeyEvent(keyEvent); 328 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::SEARCH_BUTTON); 329 330 KeyEvent keyEventShiftTab(KeyCode::KEY_TAB, KeyAction::DOWN, {KeyCode::KEY_SHIFT_LEFT, KeyCode::KEY_TAB}, 0, 331 timeStamp, 0, 0, SourceType::KEYBOARD, {}); 332 333 /** 334 * @tc.step: step4. call OnKeyEvent(). 335 * @tc.expected: focusChoice_ = FocusChoice::CANCEL_BUTTON. 336 */ 337 pattern->isSearchButtonEnabled_ = true; 338 pattern->OnKeyEvent(keyEventShiftTab); 339 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::CANCEL_BUTTON); 340 341 /** 342 * @tc.step: step5. call OnKeyEvent(). 343 * @tc.expected: focusChoice_ = FocusChoice::SEARCH. 344 */ 345 pattern->OnKeyEvent(keyEventShiftTab); 346 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::SEARCH); 347 } 348 349 /** 350 * @tc.name: Pattern019 351 * @tc.desc: test OnKeyEvent for Tab/Shift+Tab key presses and without text 352 * @tc.type: FUNC 353 */ 354 HWTEST_F(SearchTestTwoNg, Pattern019, TestSize.Level1) 355 { 356 /** 357 * @tc.step: step1. get frameNode and pattern. 358 */ 359 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 360 ASSERT_NE(frameNode, nullptr); 361 auto pattern = frameNode->GetPattern<SearchPattern>(); 362 ASSERT_NE(pattern, nullptr); 363 auto textFieldFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(TEXTFIELD_INDEX)); 364 ASSERT_NE(textFieldFrameNode, nullptr); 365 auto textFieldPattern = textFieldFrameNode->GetPattern<TextFieldPattern>(); 366 ASSERT_NE(textFieldPattern, nullptr); 367 textFieldPattern->UpdateEditingValue("", 0); 368 TimeStamp timeStamp; 369 KeyEvent keyEvent(KeyCode::KEY_TAB, KeyAction::DOWN, {KeyCode::KEY_TAB}, 0, timeStamp, 370 0, 0, SourceType::KEYBOARD, {}); 371 KeyEvent keyEventShiftTab(KeyCode::KEY_TAB, KeyAction::DOWN, {KeyCode::KEY_SHIFT_LEFT, KeyCode::KEY_TAB}, 0, 372 timeStamp, 0, 0, SourceType::KEYBOARD, {}); 373 /** 374 * @tc.step: step2. call OnKeyEvent(). 375 * @tc.expected: focusChoice_ = FocusChoice::SEARCH_BUTTON. 376 */ 377 pattern->focusChoice_ = SearchPattern::FocusChoice::SEARCH; 378 pattern->isSearchButtonEnabled_ = true; 379 pattern->cancelButtonSize_ = SizeF(0, 0); 380 pattern->OnKeyEvent(keyEvent); 381 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::SEARCH_BUTTON); 382 /** 383 * @tc.step: step3. call OnKeyEvent(). 384 * @tc.expected: focusChoice_ = FocusChoice::SEARCH. 385 */ 386 pattern->focusChoice_ = SearchPattern::FocusChoice::SEARCH_BUTTON; 387 pattern->isSearchButtonEnabled_ = true; 388 pattern->OnKeyEvent(keyEventShiftTab); 389 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::SEARCH); 390 } 391 392 /** 393 * @tc.name: Pattern020 394 * @tc.desc: test OnKeyEvent for pressing Enter when the focus is at cancel button 395 * @tc.type: FUNC 396 */ 397 HWTEST_F(SearchTestTwoNg, Pattern020, TestSize.Level1) 398 { 399 /** 400 * @tc.step: step1. get frameNode and pattern. 401 */ 402 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 403 ASSERT_NE(frameNode, nullptr); 404 auto pattern = frameNode->GetPattern<SearchPattern>(); 405 ASSERT_NE(pattern, nullptr); 406 auto textFieldFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(TEXTFIELD_INDEX)); 407 ASSERT_NE(textFieldFrameNode, nullptr); 408 auto textFieldPattern = textFieldFrameNode->GetPattern<TextFieldPattern>(); 409 ASSERT_NE(textFieldPattern, nullptr); 410 textFieldPattern->UpdateEditingValue("Text", 0); 411 TimeStamp timeStamp; 412 KeyEvent keyEvent( 413 KeyCode::KEY_TAB, KeyAction::DOWN, { KeyCode::KEY_TAB }, 0, timeStamp, 0, 0, SourceType::KEYBOARD, {}); 414 415 /** 416 * @tc.step: step2. call OnKeyEvent(). 417 * @tc.expected: focusChoice_ = FocusChoice::CANCEL_BUTTON. 418 */ 419 pattern->focusChoice_ = SearchPattern::FocusChoice::SEARCH; 420 pattern->cancelButtonSize_ = SizeF(100.0, 50.0); 421 pattern->OnKeyEvent(keyEvent); 422 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::CANCEL_BUTTON); 423 424 /** 425 * @tc.step: step3. call OnKeyEvent(). 426 * @tc.expected: focusChoice_ = FocusChoice::SEARCH. 427 */ 428 keyEvent.code = KeyCode::KEY_ENTER, keyEvent.action = KeyAction::DOWN; 429 pattern->OnKeyEvent(keyEvent); 430 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::SEARCH); 431 } 432 433 /** 434 * @tc.name: Pattern021 435 * @tc.desc: Test DragEvent 436 * @tc.type: FUNC 437 */ 438 HWTEST_F(SearchTestTwoNg, Pattern021, TestSize.Level1) 439 { 440 /** 441 * @tc.step: step1. get frameNode and pattern. 442 */ 443 SearchModelNG searchModelInstance; 444 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 445 ASSERT_NE(frameNode, nullptr); 446 auto pattern = frameNode->GetPattern<SearchPattern>(); 447 ASSERT_NE(pattern, nullptr); 448 auto eventHub = frameNode->GetEventHub<SearchEventHub>(); 449 ASSERT_NE(eventHub, nullptr); 450 auto textFieldFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildren().front()); 451 CHECK_NULL_VOID(textFieldFrameNode); 452 auto textFieldEventHub = textFieldFrameNode->GetEventHub<EventHub>(); 453 pattern->ResetDragOption(); 454 455 /** 456 * @tc.cases: case1. 457 */ 458 eventHub->SetOnDragStart( __anonf251a1430302(const RefPtr<Ace::DragEvent>&, const std::string&) 459 [](const RefPtr<Ace::DragEvent>&, const std::string&) -> DragDropInfo { return {}; }); 460 pattern->InitTextFieldDragEvent(); 461 ASSERT_NE(textFieldEventHub->onDragStart_, nullptr); 462 463 /** 464 * @tc.cases: case2. 465 */ 466 eventHub->SetCustomerOnDragFunc( __anonf251a1430402(const RefPtr<OHOS::Ace::DragEvent>&, const std::string&)467 DragFuncType::DRAG_ENTER, [](const RefPtr<OHOS::Ace::DragEvent>&, const std::string&){}); 468 pattern->InitTextFieldDragEvent(); 469 ASSERT_NE(textFieldEventHub->customerOnDragEnter_, nullptr); 470 471 /** 472 * @tc.cases: case3. 473 */ 474 eventHub->SetCustomerOnDragFunc( __anonf251a1430502(const RefPtr<OHOS::Ace::DragEvent>&, const std::string&)475 DragFuncType::DRAG_LEAVE, [](const RefPtr<OHOS::Ace::DragEvent>&, const std::string&){}); 476 pattern->InitTextFieldDragEvent(); 477 ASSERT_NE(textFieldEventHub->customerOnDragLeave_, nullptr); 478 479 /** 480 * @tc.cases: case4. 481 */ 482 eventHub->SetCustomerOnDragFunc( __anonf251a1430602(const RefPtr<OHOS::Ace::DragEvent>&, const std::string&)483 DragFuncType::DRAG_MOVE, [](const RefPtr<OHOS::Ace::DragEvent>&, const std::string&){}); 484 pattern->InitTextFieldDragEvent(); 485 ASSERT_NE(textFieldEventHub->customerOnDragMove_, nullptr); 486 487 /** 488 * @tc.cases: case5. 489 */ 490 eventHub->SetCustomerOnDragFunc( __anonf251a1430702(const RefPtr<OHOS::Ace::DragEvent>&, const std::string&)491 DragFuncType::DRAG_DROP, [](const RefPtr<OHOS::Ace::DragEvent>&, const std::string&){}); 492 pattern->InitTextFieldDragEvent(); 493 ASSERT_NE(textFieldEventHub->customerOnDrop_, nullptr); 494 495 /** 496 * @tc.cases: case6. 497 */ 498 eventHub->SetCustomerOnDragFunc( __anonf251a1430802(const RefPtr<OHOS::Ace::DragEvent>&)499 DragFuncType::DRAG_END, [](const RefPtr<OHOS::Ace::DragEvent>&){}); 500 pattern->InitTextFieldDragEvent(); 501 ASSERT_NE(textFieldEventHub->customerOnDragEnd_, nullptr); 502 } 503 504 /** 505 * @tc.name: Pattern022 506 * @tc.desc: Test key events with different focus 507 * @tc.type: FUNC 508 */ 509 HWTEST_F(SearchTestTwoNg, Pattern022, TestSize.Level1) 510 { 511 /** 512 * @tc.step: step1. get frameNode and pattern. 513 */ 514 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 515 ASSERT_NE(frameNode, nullptr); 516 auto pattern = frameNode->GetPattern<SearchPattern>(); 517 ASSERT_NE(pattern, nullptr); 518 auto textFieldFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(TEXTFIELD_INDEX)); 519 ASSERT_NE(textFieldFrameNode, nullptr); 520 auto textFieldPattern = textFieldFrameNode->GetPattern<TextFieldPattern>(); 521 TimeStamp timeStamp; 522 523 /** 524 * @tc.cases: case1. 525 */ 526 KeyEvent keyEventOne; 527 keyEventOne.code = KeyCode::KEY_TAB; 528 keyEventOne.action = KeyAction::UP; 529 pattern->focusChoice_ = SearchPattern::FocusChoice::CANCEL_BUTTON; 530 pattern->OnKeyEvent(keyEventOne); 531 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::CANCEL_BUTTON); 532 533 /** 534 * @tc.cases: case2. 535 */ 536 KeyEvent keyEventTwo(KeyCode::KEY_TAB, KeyAction::DOWN, {KeyCode::KEY_SHIFT_LEFT, KeyCode::KEY_TAB}, 0, 537 timeStamp, 0, 0, SourceType::KEYBOARD, {}); 538 pattern->focusChoice_ = SearchPattern::FocusChoice::SEARCH; 539 pattern->isSearchButtonEnabled_ = false; 540 pattern->OnKeyEvent(keyEventTwo); 541 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::SEARCH); 542 543 /** 544 * @tc.cases: case3. 545 */ 546 KeyEvent keyEventThree(KeyCode::KEY_TAB, KeyAction::DOWN, {KeyCode::KEY_TAB}, 0, timeStamp, 547 0, 0, SourceType::KEYBOARD, {}); 548 pattern->cancelButtonSize_ = SizeF(100.0f, 0.0f); 549 textFieldPattern->UpdateEditingValue("", 0); 550 pattern->OnKeyEvent(keyEventThree); 551 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::SEARCH); 552 553 /** 554 * @tc.cases: case4. 555 */ 556 KeyEvent keyEventFour(KeyCode::KEY_DPAD_RIGHT, KeyAction::DOWN, {KeyCode::KEY_DPAD_RIGHT}, 0, timeStamp, 557 0, 0, SourceType::KEYBOARD, {}); 558 textFieldPattern->UpdateEditingValue("Text", 0); 559 pattern->OnKeyEvent(keyEventFour); 560 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::SEARCH); 561 562 /** 563 * @tc.cases: case5. 564 */ 565 pattern->focusChoice_ = SearchPattern::FocusChoice::CANCEL_BUTTON; 566 pattern->cancelButtonSize_ = SizeF(100.0f, 50.0f); 567 pattern->OnKeyEvent(keyEventFour); 568 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::CANCEL_BUTTON); 569 570 /** 571 * @tc.cases: case6. 572 */ 573 KeyEvent keyEventFive; 574 keyEventFive.code = KeyCode::KEY_DPAD_LEFT; 575 keyEventFive.action = KeyAction::DOWN; 576 pattern->cancelButtonSize_ = SizeF(100.0f, 50.0f); 577 pattern->focusChoice_ = SearchPattern::FocusChoice::SEARCH; 578 pattern->OnKeyEvent(keyEventFive); 579 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::SEARCH); 580 } 581 582 /** 583 * @tc.name: Pattern023 584 * @tc.desc: Test key events with column layout 585 * @tc.type: FUNC 586 */ 587 HWTEST_F(SearchTestTwoNg, Pattern023, TestSize.Level1) 588 { 589 /** 590 * @tc.step: step1. get frameNode and pattern. 591 */ 592 auto frameNode = AceType::Claim(ViewStackProcessor::GetInstance()->GetMainFrameNode()); 593 ASSERT_NE(frameNode, nullptr); 594 auto pattern = frameNode->GetPattern<SearchPattern>(); 595 ASSERT_NE(pattern, nullptr); 596 auto textFieldFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(TEXTFIELD_INDEX)); 597 ASSERT_NE(textFieldFrameNode, nullptr); 598 auto textFieldPattern = textFieldFrameNode->GetPattern<TextFieldPattern>(); 599 ASSERT_NE(textFieldPattern, nullptr); 600 frameNode->onMainTree_ = true; 601 602 /** 603 * @tc.step: step2. create column layout. 604 */ 605 auto column = CreateColumn(); 606 auto columnFrameNode = column.first; 607 auto columnLayoutWrapper = column.second; 608 auto childLayoutConstraint = columnLayoutWrapper->GetLayoutProperty()->CreateChildConstraint(); 609 childLayoutConstraint.maxSize = CONTAINER_SIZE; 610 childLayoutConstraint.minSize = SizeF(ZERO, ZERO); 611 columnFrameNode->AddChild(frameNode); 612 auto focusHub = frameNode->GetOrCreateFocusHub(); 613 ASSERT_NE(focusHub, nullptr); 614 auto parentHub = focusHub->GetParentFocusHub(); 615 ASSERT_NE(parentHub, nullptr); 616 617 /** 618 * @tc.cases: case1. 619 */ 620 TimeStamp timeStamp; 621 KeyEvent keyEventShiftTab(KeyCode::KEY_TAB, KeyAction::DOWN, {KeyCode::KEY_SHIFT_LEFT, KeyCode::KEY_TAB}, 0, 622 timeStamp, 0, 0, SourceType::KEYBOARD, {}); 623 pattern->focusChoice_ = SearchPattern::FocusChoice::SEARCH; 624 textFieldPattern->UpdateEditingValue("Text", 0); 625 pattern->OnKeyEvent(keyEventShiftTab); 626 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::CANCEL_BUTTON); 627 628 /** 629 * @tc.cases: case2. 630 */ 631 pattern->focusChoice_ = SearchPattern::FocusChoice::SEARCH; 632 pattern->isSearchButtonEnabled_ = true; 633 pattern->OnKeyEvent(keyEventShiftTab); 634 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::SEARCH_BUTTON); 635 636 /** 637 * @tc.cases: case3. 638 */ 639 pattern->focusChoice_ = SearchPattern::FocusChoice::CANCEL_BUTTON; 640 pattern->cancelButtonSize_ = SizeF(100.0f, 0.0f); 641 KeyEvent keyEventTab(KeyCode::KEY_TAB, KeyAction::DOWN, {KeyCode::KEY_TAB}, 0, 642 timeStamp, 0, 0, SourceType::KEYBOARD, {}); 643 pattern->OnKeyEvent(keyEventTab); 644 } 645 646 /** 647 * @tc.name: Pattern024 648 * @tc.desc: Test key events in different scenarios 649 * @tc.type: FUNC 650 */ 651 HWTEST_F(SearchTestTwoNg, Pattern024, TestSize.Level1) 652 { 653 /** 654 * @tc.step: step1. get frameNode and pattern. 655 */ 656 auto frameNode = AceType::Claim(ViewStackProcessor::GetInstance()->GetMainFrameNode()); 657 ASSERT_NE(frameNode, nullptr); 658 auto pattern = frameNode->GetPattern<SearchPattern>(); 659 ASSERT_NE(pattern, nullptr); 660 auto focusHub = frameNode->GetFocusHub(); 661 ASSERT_NE(focusHub, nullptr); 662 663 /** 664 * @tc.step: step2. create key events. 665 */ 666 TimeStamp timeStamp; 667 KeyEvent keyEventTab(KeyCode::KEY_TAB, KeyAction::DOWN, {KeyCode::KEY_TAB}, 0, 668 timeStamp, 0, 0, SourceType::KEYBOARD, {}); 669 KeyEvent keyEventDpadRight(KeyCode::KEY_DPAD_RIGHT, KeyAction::DOWN, {KeyCode::KEY_DPAD_RIGHT}, 0, 670 timeStamp, 0, 0, SourceType::KEYBOARD, {}); 671 KeyEvent keyEventNumsEight(KeyCode::KEY_8, KeyAction::DOWN, {KeyCode::KEY_8}, 0, 672 timeStamp, 0, 0, SourceType::KEYBOARD, {}); 673 674 /** 675 * @tc.cases: case1. 676 */ 677 pattern->focusChoice_ = SearchPattern::FocusChoice::SEARCH_BUTTON; 678 pattern->OnKeyEvent(keyEventTab); 679 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::SEARCH_BUTTON); 680 681 /** 682 * @tc.cases: case2. 683 */ 684 auto column = CreateColumn(); 685 auto columnFrameNode = column.first; 686 columnFrameNode->AddChild(frameNode); 687 pattern->focusChoice_ = SearchPattern::FocusChoice::SEARCH_BUTTON; 688 pattern->isSearchButtonEnabled_ = true; 689 pattern->OnKeyEvent(keyEventDpadRight); 690 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::SEARCH_BUTTON); 691 692 /** 693 * @tc.cases: case3. 694 */ 695 pattern->OnKeyEvent(keyEventTab); 696 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::SEARCH); 697 698 /** 699 * @tc.cases: case4. 700 */ 701 pattern->OnKeyEvent(keyEventNumsEight); 702 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::SEARCH); 703 } 704 705 /** 706 * @tc.name: Pattern025 707 * @tc.desc: InitButtonTouchEvent ColorMode = DARK 708 * @tc.type: FUNC 709 */ 710 HWTEST_F(SearchTestTwoNg, Pattern025, TestSize.Level1) 711 { 712 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 713 ASSERT_NE(frameNode, nullptr); 714 auto pattern = frameNode->GetPattern<SearchPattern>(); 715 ASSERT_NE(pattern, nullptr); 716 TouchTestResult result; __anonf251a1430902(TouchEventInfo& info) 717 auto touchCallback = [](TouchEventInfo& info) {}; 718 auto touchEvent = AceType::MakeRefPtr<TouchEventImpl>(std::move(touchCallback)); 719 pattern->InitButtonTouchEvent(touchEvent, BUTTON_INDEX); 720 auto buttonFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(BUTTON_INDEX)); 721 ASSERT_NE(buttonFrameNode, nullptr); 722 auto gesture = buttonFrameNode->GetOrCreateGestureEventHub(); 723 ASSERT_NE(gesture, nullptr); 724 auto touchEventActuator = gesture->touchEventActuator_; 725 ASSERT_NE(touchEventActuator, nullptr); 726 auto events = touchEventActuator->touchEvents_; 727 TouchEventInfo info("onTouch"); 728 TouchLocationInfo touchInfo1(1); 729 touchInfo1.SetTouchType(TouchType::UP); 730 info.AddTouchLocationInfo(std::move(touchInfo1)); 731 ASSERT_NE(events.size(), 0); 732 SystemProperties::SetColorMode(ColorMode::DARK); 733 for (auto event : events) { 734 event->callback_(info); 735 } 736 } 737 738 /** 739 * @tc.name: Pattern026 740 * @tc.desc: Test SearchController init 741 * @tc.type: FUNC 742 */ 743 HWTEST_F(SearchTestTwoNg, Pattern026, TestSize.Level1) 744 { 745 SearchModelNG searchModelInstance; 746 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 747 ASSERT_NE(frameNode, nullptr); 748 auto pattern = frameNode->GetPattern<SearchPattern>(); 749 auto textFieldFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(TEXTFIELD_INDEX)); 750 ASSERT_NE(textFieldFrameNode, nullptr); 751 auto textFieldPattern = textFieldFrameNode->GetPattern<TextFieldPattern>(); 752 ASSERT_NE(textFieldPattern, nullptr); 753 textFieldPattern->UpdateEditingValue("", 0); 754 755 pattern->InitSearchController(); 756 pattern->searchController_->getTextContentRect_(); 757 RectF textRect = textFieldPattern->GetTextRect(); 758 EXPECT_EQ(textRect, RectF(0, 0, 0, 0)); 759 760 pattern->searchController_->getTextContentLinesNum_(); 761 auto textFieldController = textFieldPattern->GetTextFieldController(); 762 int32_t contentLines = textFieldController->GetTextContentLinesNum(); 763 EXPECT_EQ(contentLines, 0); 764 765 pattern->searchController_->getCaretIndex_(); 766 int32_t caretIndex = textFieldController->GetCaretIndex(); 767 EXPECT_EQ(caretIndex, 0); 768 769 pattern->searchController_->getCaretPosition_(); 770 auto caretPosition = textFieldController->GetCaretPosition(); 771 EXPECT_EQ(caretPosition, OffsetF(0, 0)); 772 773 textFieldPattern->UpdateEditingValue("Text", 0); 774 pattern->searchController_->stopEditing_(); 775 caretIndex = textFieldController->GetCaretIndex(); 776 EXPECT_EQ(caretIndex, 0); 777 } 778 779 /** 780 * @tc.name: UpdateChangeEvent001 781 * @tc.desc: test search UpdateChangeEvent 782 * @tc.type: FUNC 783 */ 784 HWTEST_F(SearchTestTwoNg, UpdateChangeEvent001, TestSize.Level1) 785 { 786 SearchModelNG searchModelInstance; 787 auto frameNode =AceType::Claim(ViewStackProcessor::GetInstance()->GetMainFrameNode()); 788 ASSERT_NE(frameNode, nullptr); 789 auto eventHub = frameNode->GetEventHub<SearchEventHub>(); 790 ASSERT_NE(eventHub, nullptr); 791 eventHub->AttachHost(frameNode); __anonf251a1430a02(const std::string str) 792 eventHub->onValueChangeEvent_ = [](const std::string str) {}; __anonf251a1430b02(const std::string str) 793 eventHub->changeEvent_ = [](const std::string str) {}; 794 eventHub->UpdateChangeEvent(""); 795 } 796 797 /** 798 * @tc.name: PackInnerRecognizer001 799 * @tc.desc: test search PackInnerRecognizer 800 * @tc.type: FUNC 801 */ 802 HWTEST_F(SearchTestTwoNg, PackInnerRecognizerr001, TestSize.Level1) 803 { 804 /** 805 * @tc.steps: step1. Create SearchGestureEventHub. 806 */ 807 auto eventHub = AceType::MakeRefPtr<EventHub>(); 808 EXPECT_TRUE(eventHub); 809 auto searchgestureEventHub = AceType::MakeRefPtr<SearchGestureEventHub>(eventHub); 810 EXPECT_TRUE(searchgestureEventHub); 811 Offset offset; 812 std::list<RefPtr<NGGestureRecognizer>> innerRecognizers; 813 int32_t touchId = 0; 814 RefPtr<TargetComponent> targetComponent; 815 searchgestureEventHub->innerParallelRecognizer_ = nullptr; 816 searchgestureEventHub->CheckClickActuator(); 817 auto clickEventActuator = searchgestureEventHub->GetUserClickEventActuator(); __anonf251a1430c02(GestureEvent& info) 818 GestureEventFunc callback = [](GestureEvent& info) {}; 819 clickEventActuator->SetUserCallback(std::move(callback)); 820 searchgestureEventHub->PackInnerRecognizer(offset, innerRecognizers, touchId, targetComponent); 821 searchgestureEventHub->PackInnerRecognizer(offset, innerRecognizers, touchId, targetComponent); 822 } 823 824 /** 825 * @tc.name: MinFontSize001 826 * @tc.desc: test search minFontSize 827 * @tc.type: FUNC 828 */ 829 HWTEST_F(SearchTestTwoNg, MinFontSize001, TestSize.Level1) 830 { 831 /** 832 * @tc.step: step1. create frameNode and pattern. 833 */ 834 SearchModelNG searchModelInstance; 835 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 836 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 837 frameNode->MarkModifyDone(); 838 auto textFieldFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(TEXTFIELD_INDEX)); 839 auto textFieldPattern = textFieldFrameNode->GetPattern<TextFieldPattern>(); 840 auto textFieldLayoutProperty = textFieldFrameNode->GetLayoutProperty<TextFieldLayoutProperty>(); 841 842 /** 843 * @tc.step: step2. set minFontSize 1.0 fp. 844 */ 845 searchModelInstance.SetAdaptMinFontSize(1.0_fp); 846 frameNode->MarkModifyDone(); 847 848 /** 849 * @tc.step: step3. test minFontSize 850 */ 851 EXPECT_EQ(textFieldLayoutProperty->GetAdaptMinFontSize(), 1.0_fp); 852 } 853 854 /** 855 * @tc.name: MaxFontSize001 856 * @tc.desc: test search maxFontSize 857 * @tc.type: FUNC 858 */ 859 HWTEST_F(SearchTestTwoNg, MaxFontSize001, TestSize.Level1) 860 { 861 /** 862 * @tc.step: step1. create frameNode and pattern. 863 */ 864 SearchModelNG searchModelInstance; 865 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 866 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 867 frameNode->MarkModifyDone(); 868 auto textFieldFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(TEXTFIELD_INDEX)); 869 auto textFieldLayoutProperty = textFieldFrameNode->GetLayoutProperty<TextFieldLayoutProperty>(); 870 871 /** 872 * @tc.step: step2. set maxFontSize 2.0 fp. 873 */ 874 searchModelInstance.SetAdaptMaxFontSize(2.0_fp); 875 frameNode->MarkModifyDone(); 876 877 /** 878 * @tc.step: step3. test maxFontSize 879 */ 880 EXPECT_EQ(textFieldLayoutProperty->GetAdaptMaxFontSize(), 2.0_fp); 881 } 882 883 /** 884 * @tc.name: SetHeight001 885 * @tc.desc: test search 886 * @tc.type: FUNC 887 */ 888 HWTEST_F(SearchTestTwoNg, SetProperty001, TestSize.Level1) 889 { 890 SearchModelNG searchModelInstance; 891 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 892 auto fNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 893 auto textFieldChild = AceType::DynamicCast<FrameNode>(fNode->GetChildren().front()); 894 ASSERT_NE(textFieldChild, nullptr); 895 auto textFieldLayoutProperty = textFieldChild->GetLayoutProperty<TextFieldLayoutProperty>(); 896 CHECK_NULL_VOID(textFieldLayoutProperty); 897 auto eventHub = textFieldChild->GetEventHub<TextFieldEventHub>(); 898 CHECK_NULL_VOID(eventHub); 899 auto pattern = textFieldChild->GetPattern<TextFieldPattern>(); 900 ASSERT_NE(pattern, nullptr); 901 902 //test SetHeight 903 searchModelInstance.SetHeight(Dimension(2.5, DimensionUnit::VP)); 904 905 //test SetOnChange __anonf251a1430d02(const std::string str, PreviewText previewText) 906 searchModelInstance.SetOnChange([](const std::string str, PreviewText previewText) {}); 907 EXPECT_NE(eventHub->GetOnChange(), nullptr); 908 909 //test SetOnTextSelectionChange __anonf251a1430e02(int32_t a, int32_t b) 910 searchModelInstance.SetOnTextSelectionChange([](int32_t a, int32_t b) {}); 911 EXPECT_NE(eventHub->onSelectionChange_, nullptr); 912 913 //test SetOnScroll __anonf251a1430f02(float a, float b) 914 searchModelInstance.SetOnScroll([](float a, float b) {}); 915 EXPECT_NE(eventHub->onScrollChangeEvent_, nullptr); 916 917 //test SetSelectionMenuHidden 918 searchModelInstance.SetSelectionMenuHidden(true); 919 EXPECT_EQ(textFieldLayoutProperty->GetSelectionMenuHidden().value(), true); 920 921 //test SetOnCut __anonf251a1431002(const std::string str) 922 searchModelInstance.SetOnCut([](const std::string str) {}); 923 EXPECT_NE(eventHub->onCut_, nullptr); 924 925 //test SetCustomKeyboard __anonf251a1431102() 926 searchModelInstance.SetCustomKeyboard([]() {}); 927 EXPECT_NE(pattern->customKeyboardBuilder_, nullptr); 928 929 //test SetType 930 searchModelInstance.SetType(TextInputType::BEGIN); 931 EXPECT_EQ(textFieldLayoutProperty->GetTextInputType().value(), TextInputType::BEGIN); 932 searchModelInstance.SetType(TextInputType::TEXT); 933 EXPECT_EQ(textFieldLayoutProperty->GetTextInputType().value(), TextInputType::TEXT); 934 } 935 936 /** 937 * @tc.name: SetHeight002 938 * @tc.desc: test search 939 * @tc.type: FUNC 940 */ 941 HWTEST_F(SearchTestTwoNg, SetProperty002, TestSize.Level1) 942 { 943 SearchModelNG searchModelInstance; 944 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 945 auto fNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 946 FrameNode* frameNode = &(*fNode); 947 auto textFieldChild = AceType::DynamicCast<FrameNode>(fNode->GetChildren().front()); 948 ASSERT_NE(textFieldChild, nullptr); 949 auto textFieldLayoutProperty = textFieldChild->GetLayoutProperty<TextFieldLayoutProperty>(); 950 CHECK_NULL_VOID(textFieldLayoutProperty); 951 auto pattern = textFieldChild->GetPattern<TextFieldPattern>(); 952 ASSERT_NE(pattern, nullptr); 953 954 //test RequestKeyboardOnFocus 955 searchModelInstance.RequestKeyboardOnFocus(frameNode, true); 956 EXPECT_EQ(pattern->needToRequestKeyboardOnFocus_, true); 957 958 //test SetPlaceholderFont 959 Font font; 960 font.fontSize = Dimension(2); 961 font.fontStyle = Ace::FontStyle::NORMAL; 962 font.fontWeight = FontWeight::W200; 963 std::vector<std::string> families = { "cursive" }; 964 font.fontFamilies = families; 965 searchModelInstance.SetPlaceholderFont(frameNode, font); 966 EXPECT_EQ(textFieldLayoutProperty->GetPlaceholderFontWeight(), FontWeight::W200); 967 968 //test SetSearchIconSize 969 auto searchLayoutProperty = fNode->GetLayoutProperty<SearchLayoutProperty>(); 970 searchModelInstance.SetSearchIconSize(frameNode, Dimension(2.5, DimensionUnit::VP)); 971 EXPECT_EQ(searchLayoutProperty->GetSearchIconUDSize(), 2.5_vp); 972 973 //test SetSearchSrcPath 974 auto imageFrameNode = AceType::DynamicCast<FrameNode>(fNode->GetChildAtIndex(IMAGE_INDEX)); 975 auto imageLayoutProperty = imageFrameNode->GetLayoutProperty<ImageLayoutProperty>(); 976 searchModelInstance.SetSearchSrcPath(frameNode, EMPTY_VALUE); 977 searchModelInstance.SetSearchSrcPath(frameNode, "/common/icon.png"); 978 ASSERT_STREQ(imageLayoutProperty->GetImageSourceInfo()->GetSrc().c_str(), "/common/icon.png"); 979 980 //test SetSearchIconColor 981 auto imageRenderProperty = imageFrameNode->GetPaintProperty<ImageRenderProperty>(); 982 ImageSourceInfo imageSourceInfo("", Dimension(-1), Dimension(-1), InternalResource::ResourceId::CORRECT_SVG); 983 imageLayoutProperty->UpdateImageSourceInfo(imageSourceInfo); 984 searchModelInstance.SetSearchIconColor(frameNode, Color::RED); 985 EXPECT_EQ(imageRenderProperty->GetSvgFillColor(), Color::RED); 986 987 //test SetSearchButton 988 auto buttonFrameNode = AceType::DynamicCast<FrameNode>(fNode->GetChildAtIndex(BUTTON_INDEX)); 989 CHECK_NULL_VOID(buttonFrameNode); 990 auto searchButtonRenderContext = buttonFrameNode->GetRenderContext(); 991 CHECK_NULL_VOID(searchButtonRenderContext); 992 searchModelInstance.SetSearchButton(frameNode, EMPTY_VALUE); 993 EXPECT_EQ(searchButtonRenderContext->GetOpacity(), 0.0); 994 searchModelInstance.SetSearchButton(frameNode, PLACEHOLDER); 995 EXPECT_EQ(searchButtonRenderContext->GetOpacity(), 1.0); 996 997 //test SetSearchButtonFontSize 998 auto buttonLayoutProperty = buttonFrameNode->GetLayoutProperty<ButtonLayoutProperty>(); 999 searchModelInstance.SetSearchButtonFontSize(frameNode, 14.0_vp); 1000 EXPECT_EQ(buttonLayoutProperty->GetFontSize(), 14.0_vp); 1001 1002 //test SetTextColor 1003 searchModelInstance.SetTextColor(frameNode, Color::RED); 1004 EXPECT_EQ(textFieldLayoutProperty->GetTextColor(), Color::RED); 1005 } 1006 1007 /** 1008 * @tc.name: SetHeight003 1009 * @tc.desc: test search 1010 * @tc.type: FUNC 1011 */ 1012 HWTEST_F(SearchTestTwoNg, SetProperty003, TestSize.Level1) 1013 { 1014 SearchModelNG searchModelInstance; 1015 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 1016 auto fNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1017 FrameNode* frameNode = &(*fNode); 1018 auto textFieldChild = AceType::DynamicCast<FrameNode>(fNode->GetChildren().front()); 1019 auto textFieldLayoutProperty = textFieldChild->GetLayoutProperty<TextFieldLayoutProperty>(); 1020 1021 //test SetSearchButtonFontColor 1022 auto buttonFNode = AceType::DynamicCast<FrameNode>(fNode->GetChildAtIndex(BUTTON_INDEX)); 1023 auto bnLayoutProperty = buttonFNode->GetLayoutProperty<ButtonLayoutProperty>(); 1024 searchModelInstance.SetSearchButtonFontColor(frameNode, Color::RED); 1025 EXPECT_EQ(bnLayoutProperty->GetFontColor(), Color::RED); 1026 1027 //test SetCopyOption 1028 searchModelInstance.SetCopyOption(frameNode, CopyOptions::Distributed); 1029 EXPECT_EQ(textFieldLayoutProperty->GetCopyOptions(), OHOS::Ace::CopyOptions::Distributed); 1030 1031 //test SetTextFont 1032 Font font; 1033 font.fontSize = Dimension(2); 1034 font.fontStyle = Ace::FontStyle::NORMAL; 1035 font.fontWeight = FontWeight::W200; 1036 std::vector<std::string> families = { "cursive" }; 1037 font.fontFamilies = families; 1038 searchModelInstance.SetTextFont(frameNode, font); 1039 EXPECT_EQ(textFieldLayoutProperty->GetFontWeight(), FontWeight::W200); 1040 1041 //test SetPlaceholderColor 1042 searchModelInstance.SetPlaceholderColor(frameNode, Color::RED); 1043 EXPECT_EQ(textFieldLayoutProperty->GetPlaceholderTextColor(), Color::RED); 1044 1045 //test SetSelectionMenuHidden 1046 searchModelInstance.SetSelectionMenuHidden(frameNode, true); 1047 EXPECT_EQ(textFieldLayoutProperty->GetSelectionMenuHidden(), true); 1048 1049 //test SetCaretWidth 1050 auto paintProperty = textFieldChild->GetPaintProperty<TextFieldPaintProperty>(); 1051 searchModelInstance.SetCaretWidth(frameNode, Dimension(2.5, DimensionUnit::VP)); 1052 EXPECT_EQ(paintProperty->GetCursorWidth().value().Value(), 2.5); 1053 1054 //test SetCaretColor 1055 searchModelInstance.SetCaretColor(frameNode, Color::BLUE); 1056 searchModelInstance.SetTextAlign(frameNode, TextAlign::CENTER); 1057 1058 //test SetCancelButtonStyle 1059 searchModelInstance.SetCancelButtonStyle(frameNode, CancelButtonStyle::CONSTANT); 1060 fNode->MarkModifyDone(); 1061 auto searchLayoutProperty = fNode->GetLayoutProperty<SearchLayoutProperty>(); 1062 EXPECT_EQ(searchLayoutProperty->GetCancelButtonStyle(), CancelButtonStyle::CONSTANT); 1063 searchModelInstance.SetCancelButtonStyle(frameNode, CancelButtonStyle::INVISIBLE); 1064 fNode->MarkModifyDone(); 1065 EXPECT_EQ(searchLayoutProperty->GetCancelButtonStyle(), CancelButtonStyle::INVISIBLE); 1066 1067 //test SetCancelIconSize 1068 searchModelInstance.SetCancelIconSize(frameNode, 14.0_vp); 1069 EXPECT_EQ(searchLayoutProperty->GetCancelButtonUDSize(), 14.0_vp); 1070 1071 //test SetCancelIconColor 1072 auto imageFNode = AceType::DynamicCast<FrameNode>(fNode->GetChildAtIndex(CANCEL_IMAGE_INDEX)); 1073 auto imageRProperty = imageFNode->GetPaintProperty<ImageRenderProperty>(); 1074 searchModelInstance.SetCancelIconColor(frameNode, Color::RED); 1075 EXPECT_EQ(imageRProperty->GetSvgFillColor(), Color::RED); 1076 1077 //test SetRightIconSrcPath 1078 auto cancelImageLayoutProperty = imageFNode->GetLayoutProperty<ImageLayoutProperty>(); 1079 searchModelInstance.SetRightIconSrcPath(frameNode, ""); 1080 ASSERT_STREQ(cancelImageLayoutProperty->GetImageSourceInfo()->GetSrc().c_str(), "resource:///ohos_test_image.svg"); 1081 1082 //test SetEnterKeyType 1083 searchModelInstance.SetSearchEnterKeyType(frameNode, TextInputAction::NEXT); 1084 auto textFieldPattern = textFieldChild->GetPattern<TextFieldPattern>(); 1085 EXPECT_EQ(TextInputAction::NEXT, textFieldPattern->GetTextInputActionValue(TextInputAction::UNSPECIFIED)); 1086 } 1087 1088 /** 1089 * @tc.name: SetEnterKeyType001 1090 * @tc.desc: test search set enterKeyType default value 1091 * @tc.type: FUNC 1092 */ 1093 HWTEST_F(SearchTestTwoNg, SetEnterKeyType001, TestSize.Level1) 1094 { 1095 SearchModelNG searchModelInstance; 1096 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 1097 auto fNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1098 FrameNode* frameNode = &(*fNode); 1099 searchModelInstance.SetSearchEnterKeyType(frameNode, TextInputAction::UNSPECIFIED); 1100 auto textFieldChild = AceType::DynamicCast<FrameNode>(fNode->GetChildren().front()); 1101 auto textFieldPattern = textFieldChild->GetPattern<TextFieldPattern>(); 1102 EXPECT_EQ(TextInputAction::SEARCH, textFieldPattern->GetTextInputActionValue(TextInputAction::UNSPECIFIED)); 1103 } 1104 1105 /** 1106 * @tc.name: LetterSpacing001 1107 * @tc.desc: test search letterSpacing 1108 * @tc.type: FUNC 1109 */ 1110 HWTEST_F(SearchTestTwoNg, LetterSpacing001, TestSize.Level1) 1111 { 1112 /** 1113 * @tc.step: step1. create frameNode and pattern. 1114 */ 1115 SearchModelNG searchModelInstance; 1116 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 1117 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1118 frameNode->MarkModifyDone(); 1119 auto pattern = frameNode->GetPattern<SearchPattern>(); 1120 auto textFieldFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(TEXTFIELD_INDEX)); 1121 auto textFieldPattern = textFieldFrameNode->GetPattern<TextFieldPattern>(); 1122 auto textFieldLayoutProperty = textFieldFrameNode->GetLayoutProperty<TextFieldLayoutProperty>(); 1123 1124 /** 1125 * @tc.step: step2. set letterSpacing 1.0 fp. 1126 */ 1127 searchModelInstance.SetLetterSpacing(1.0_fp); 1128 frameNode->MarkModifyDone(); 1129 1130 /** 1131 * @tc.step: step3. test letterSpacing 1132 */ 1133 EXPECT_EQ(textFieldLayoutProperty->GetLetterSpacing(), 1.0_fp); 1134 } 1135 1136 /** 1137 * @tc.name: LineHeight001 1138 * @tc.desc: test search lineHeight 1139 * @tc.type: FUNC 1140 */ 1141 HWTEST_F(SearchTestTwoNg, LineHeight001, TestSize.Level1) 1142 { 1143 /** 1144 * @tc.step: step1. create frameNode and pattern. 1145 */ 1146 SearchModelNG searchModelInstance; 1147 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 1148 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1149 frameNode->MarkModifyDone(); 1150 auto pattern = frameNode->GetPattern<SearchPattern>(); 1151 auto textFieldFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(TEXTFIELD_INDEX)); 1152 auto textFieldPattern = textFieldFrameNode->GetPattern<TextFieldPattern>(); 1153 auto textFieldLayoutProperty = textFieldFrameNode->GetLayoutProperty<TextFieldLayoutProperty>(); 1154 1155 /** 1156 * @tc.step: step2. set lineHeight 2.0 fp. 1157 */ 1158 searchModelInstance.SetLineHeight(2.0_fp); 1159 frameNode->MarkModifyDone(); 1160 1161 /** 1162 * @tc.step: step3. test lineHeight 1163 */ 1164 EXPECT_EQ(textFieldLayoutProperty->GetLineHeight(), 2.0_fp); 1165 } 1166 1167 /** 1168 * @tc.name: TextDecoration001 1169 * @tc.desc: test search decoration 1170 * @tc.type: FUNC 1171 */ 1172 HWTEST_F(SearchTestTwoNg, TextDecoration001, TestSize.Level1) 1173 { 1174 /** 1175 * @tc.step: step1. create frameNode and pattern. 1176 */ 1177 SearchModelNG searchModelInstance; 1178 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 1179 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1180 frameNode->MarkModifyDone(); 1181 auto pattern = frameNode->GetPattern<SearchPattern>(); 1182 auto textFieldFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(TEXTFIELD_INDEX)); 1183 auto textFieldPattern = textFieldFrameNode->GetPattern<TextFieldPattern>(); 1184 auto textFieldLayoutProperty = textFieldFrameNode->GetLayoutProperty<TextFieldLayoutProperty>(); 1185 /** 1186 * @tc.step: step2. set decoration Ace::TextDecoration::UNDERLINE. 1187 */ 1188 searchModelInstance.SetTextDecoration(Ace::TextDecoration::UNDERLINE); 1189 frameNode->MarkModifyDone(); 1190 searchModelInstance.SetTextDecorationColor(Color::BLUE); 1191 frameNode->MarkModifyDone(); 1192 searchModelInstance.SetTextDecorationStyle(Ace::TextDecorationStyle::DASHED); 1193 frameNode->MarkModifyDone(); 1194 /** 1195 * @tc.step: step3. test decoration 1196 */ 1197 EXPECT_EQ(textFieldLayoutProperty->GetTextDecoration(), Ace::TextDecoration::UNDERLINE); 1198 EXPECT_EQ(textFieldLayoutProperty->GetTextDecorationColor(), Color::BLUE); 1199 EXPECT_EQ(textFieldLayoutProperty->GetTextDecorationStyle(), Ace::TextDecorationStyle::DASHED); 1200 } 1201 1202 /** 1203 * @tc.name: UpdateFontFeature 1204 * @tc.desc: test fontFeature 1205 * @tc.type: FUNC 1206 */ 1207 HWTEST_F(SearchTestTwoNg, SetProperty004, TestSize.Level1) 1208 { 1209 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1210 ASSERT_NE(frameNode, nullptr); 1211 auto layoutProperty = frameNode->GetLayoutProperty<SearchLayoutProperty>(); 1212 SearchModelNG searchModelInstance; 1213 searchModelInstance.SetFontFeature(FONT_FEATURE_VALUE_1); 1214 EXPECT_EQ(layoutProperty->GetFontFeature(), FONT_FEATURE_VALUE_1); 1215 1216 layoutProperty->UpdateFontFeature(ParseFontFeatureSettings("\"ss01\" 0")); 1217 SearchModelNG::SetFontFeature(frameNode, FONT_FEATURE_VALUE_1); 1218 EXPECT_EQ(layoutProperty->GetFontFeature(), FONT_FEATURE_VALUE_1); 1219 } 1220 1221 /** 1222 * @tc.name: UpdateFontFeature 1223 * @tc.desc: test fontFeature 1224 * @tc.type: FUNC 1225 */ 1226 HWTEST_F(SearchTestTwoNg, SetProperty005, TestSize.Level1) 1227 { 1228 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1229 ASSERT_NE(frameNode, nullptr); 1230 auto layoutProperty = frameNode->GetLayoutProperty<SearchLayoutProperty>(); 1231 SearchModelNG searchModelInstance; 1232 searchModelInstance.SetFontFeature(FONT_FEATURE_VALUE_0); 1233 EXPECT_EQ(layoutProperty->GetFontFeature(), FONT_FEATURE_VALUE_0); 1234 1235 layoutProperty->UpdateFontFeature(ParseFontFeatureSettings("\"ss01\" 1")); 1236 SearchModelNG::SetFontFeature(frameNode, FONT_FEATURE_VALUE_0); 1237 EXPECT_EQ(layoutProperty->GetFontFeature(), FONT_FEATURE_VALUE_0); 1238 } 1239 1240 /** 1241 * @tc.name: SupportAvoidanceTest 1242 * @tc.desc: test whether the custom keyboard supports the collision avoidance function 1243 * @tc.type: FUNC 1244 */ 1245 HWTEST_F(SearchTestTwoNg, SupportAvoidanceTest, TestSize.Level1) 1246 { 1247 /** 1248 * @tc.step: step1. get frameNode and pattern. 1249 */ 1250 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1251 ASSERT_NE(frameNode, nullptr); 1252 auto textFieldFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(TEXTFIELD_INDEX)); 1253 ASSERT_NE(textFieldFrameNode, nullptr); 1254 auto textFieldPattern = textFieldFrameNode->GetPattern<TextFieldPattern>(); 1255 ASSERT_NE(textFieldPattern, nullptr); 1256 auto supportAvoidance = true; 1257 textFieldPattern->SetCustomKeyboardOption(supportAvoidance); 1258 EXPECT_TRUE(textFieldPattern->keyboardAvoidance_); 1259 supportAvoidance = false; 1260 textFieldPattern->SetCustomKeyboardOption(supportAvoidance); 1261 EXPECT_FALSE(textFieldPattern->keyboardAvoidance_); 1262 } 1263 1264 /** 1265 * @tc.name: SearchTypeToString001 1266 * @tc.desc: test search pattern UpdateInspectorId 1267 * @tc.type: FUNC 1268 */ 1269 HWTEST_F(SearchTestTwoNg, SearchTypeToString001, TestSize.Level1) 1270 { 1271 /** 1272 * @tc.step: step1. create frameNode and pattern. 1273 */ 1274 SearchModelNG searchModelInstance; 1275 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 1276 /** 1277 * @tc.step: step2. Call SearchTypeToString. 1278 */ 1279 searchModelInstance.SetType(TextInputType::NUMBER); 1280 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1281 frameNode->MarkModifyDone(); 1282 auto pattern = frameNode->GetPattern<SearchPattern>(); 1283 EXPECT_EQ(pattern->SearchTypeToString(), "SearchType.NUMBER"); 1284 } 1285 1286 HWTEST_F(SearchTestTwoNg, SearchTypeToString002, TestSize.Level1) 1287 { 1288 SearchModelNG searchModelInstance; 1289 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 1290 searchModelInstance.SetType(TextInputType::EMAIL_ADDRESS); 1291 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1292 frameNode->MarkModifyDone(); 1293 auto pattern = frameNode->GetPattern<SearchPattern>(); 1294 EXPECT_EQ(pattern->SearchTypeToString(), "SearchType.EMAIL"); 1295 } 1296 1297 HWTEST_F(SearchTestTwoNg, SearchTypeToString003, TestSize.Level1) 1298 { 1299 SearchModelNG searchModelInstance; 1300 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 1301 searchModelInstance.SetType(TextInputType::PHONE); 1302 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1303 frameNode->MarkModifyDone(); 1304 auto pattern = frameNode->GetPattern<SearchPattern>(); 1305 EXPECT_EQ(pattern->SearchTypeToString(), "SearchType.PHONE_NUMBER"); 1306 } 1307 1308 HWTEST_F(SearchTestTwoNg, SearchTypeToString004, TestSize.Level1) 1309 { 1310 SearchModelNG searchModelInstance; 1311 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 1312 searchModelInstance.SetType(TextInputType::URL); 1313 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1314 frameNode->MarkModifyDone(); 1315 auto pattern = frameNode->GetPattern<SearchPattern>(); 1316 EXPECT_EQ(pattern->SearchTypeToString(), "SearchType.URL"); 1317 } 1318 1319 /** 1320 * @tc.name: PatternOnColorConfigurationUpdate012 1321 * @tc.desc: Test pttern HandleTextContentLines 1322 * @tc.type: FUNC 1323 */ 1324 HWTEST_F(SearchTestTwoNg, PatternOnColorConfigurationUpdate012, TestSize.Level1) 1325 { 1326 /** 1327 * @tc.step: step1. create frameNode and pattern. 1328 */ 1329 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1330 ASSERT_NE(frameNode, nullptr); 1331 auto textFieldFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(TEXTFIELD_INDEX)); 1332 CHECK_NULL_VOID(textFieldFrameNode); 1333 1334 /** 1335 * @tc.step: step2. create textFieldPattern and searchPattern. 1336 */ 1337 auto textFieldPattern = textFieldFrameNode->GetPattern<TextFieldPattern>(); 1338 CHECK_NULL_VOID(textFieldPattern); 1339 textFieldPattern->UpdateEditingValue("", 0); 1340 auto pattern = frameNode->GetPattern<SearchPattern>(); 1341 ASSERT_NE(pattern, nullptr); 1342 1343 /** 1344 * @tc.step: step3. call HandleTextContentLines. 1345 * @tc.expected: cover branch IsOperation is false and call HandleTextContentLines 1346 */ 1347 int32_t result = pattern->HandleTextContentLines(); 1348 EXPECT_EQ(result, 0); 1349 1350 /** 1351 * @tc.step: step4. call HandleTextContentLines. 1352 * @tc.expected: cover branch IsOperation is true and GetLineHeight value is 0. 1353 */ 1354 textFieldPattern->UpdateEditingValue("aaa", 0); 1355 result = pattern->HandleTextContentLines(); 1356 EXPECT_EQ(result, 0); 1357 pattern->HandleCaretPosition(3); // 3 is caret index 1358 pattern->HandleGetCaretPosition(); 1359 auto index = pattern->HandleGetCaretIndex(); 1360 ASSERT_EQ(index, 3); // 3 is caret index 1361 1362 /** 1363 * @tc.step: step5. call HandleTextContentLines. 1364 * @tc.expected: cover branch IsOperation is true and GetLineHeight value is not 0. 1365 */ 1366 textFieldPattern->UpdateEditingValue("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 45); 1367 pattern->HandleCaretPosition(6); 1368 result = pattern->HandleTextContentLines(); 1369 EXPECT_EQ(result, 0); 1370 } 1371 1372 /** 1373 * @tc.name: Pattern003 1374 * @tc.desc: UpdateChangeEvent and ToJsonValue while cancel button style is different 1375 * @tc.type: FUNC 1376 */ 1377 HWTEST_F(SearchTestTwoNg, Pattern003, TestSize.Level1) 1378 { 1379 SearchModelNG searchModelInstance; 1380 searchModelInstance.SetCancelButtonStyle(CancelButtonStyle::CONSTANT); 1381 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1382 ASSERT_NE(frameNode, nullptr); 1383 auto layoutProperty = frameNode->GetLayoutProperty<SearchLayoutProperty>(); 1384 auto pattern = frameNode->GetPattern<SearchPattern>(); 1385 std::unique_ptr<JsonValue> json = std::make_unique<JsonValue>(); 1386 ASSERT_NE(pattern, nullptr); 1387 1388 pattern->UpdateChangeEvent("search"); 1389 pattern->ToJsonValue(json, filter); 1390 EXPECT_EQ(layoutProperty->GetCancelButtonStyle(), CancelButtonStyle::CONSTANT); 1391 } 1392 1393 /** 1394 * @tc.name: Pattern004 1395 * @tc.desc: UpdateChangeEvent and ToJsonValue while cancel button style is different 1396 * @tc.type: FUNC 1397 */ 1398 HWTEST_F(SearchTestTwoNg, Pattern004, TestSize.Level1) 1399 { 1400 SearchModelNG searchModelInstance; 1401 searchModelInstance.SetCancelButtonStyle(CancelButtonStyle::INVISIBLE); 1402 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1403 ASSERT_NE(frameNode, nullptr); 1404 auto layoutProperty = frameNode->GetLayoutProperty<SearchLayoutProperty>(); 1405 auto pattern = frameNode->GetPattern<SearchPattern>(); 1406 std::unique_ptr<JsonValue> json = std::make_unique<JsonValue>(); 1407 ASSERT_NE(pattern, nullptr); 1408 1409 pattern->UpdateChangeEvent(""); 1410 pattern->ToJsonValue(json, filter); 1411 EXPECT_EQ(layoutProperty->GetCancelButtonStyle(), CancelButtonStyle::INVISIBLE); 1412 } 1413 1414 /** 1415 * @tc.name: PatternHandleFocusEvent001 1416 * @tc.desc: Test HandleFocusEvent 1417 * @tc.type: FUNC 1418 */ 1419 HWTEST_F(SearchTestTwoNg, PatternHandleFocusEvent001, TestSize.Level1) 1420 { 1421 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1422 frameNode->MarkModifyDone(); 1423 auto pattern = frameNode->GetPattern<SearchPattern>(); 1424 bool backwardFocusMovement = true; 1425 bool forwardFocusMovement = true; 1426 pattern -> HandleFocusEvent(forwardFocusMovement, backwardFocusMovement); 1427 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::SEARCH); 1428 } 1429 1430 } // namespace OHOS::Ace::NG 1431