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>(); __anond0d3067b0202(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( __anond0d3067b0302(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( __anond0d3067b0402(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( __anond0d3067b0502(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( __anond0d3067b0602(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( __anond0d3067b0702(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( __anond0d3067b0802(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; __anond0d3067b0902(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: OnSubmitEvent001 781 * @tc.desc: Test Search onSubmit event 782 * @tc.type: FUNC 783 */ 784 HWTEST_F(SearchTestTwoNg, OnSubmitEvent001, TestSize.Level1) 785 { 786 SearchModelNG searchModelInstance; 787 auto frameNode = AceType::Claim(ViewStackProcessor::GetInstance()->GetMainFrameNode()); 788 ASSERT_NE(frameNode, nullptr); 789 auto textFieldFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(TEXTFIELD_INDEX)); 790 ASSERT_NE(textFieldFrameNode, nullptr); 791 auto textFieldPattern = textFieldFrameNode->GetPattern<TextFieldPattern>(); 792 ASSERT_NE(textFieldPattern, nullptr); 793 auto eventHub = frameNode->GetEventHub<SearchEventHub>(); 794 ASSERT_NE(eventHub, nullptr); 795 eventHub->AttachHost(frameNode); 796 797 int count = 0; 798 TextFieldCommonEvent event2; __anond0d3067b0a02(const std::string& title, NG::TextFieldCommonEvent& event) 799 auto callback = [&count, &event2](const std::string& title, NG::TextFieldCommonEvent& event) { 800 event2 = event; 801 if (count > 0) { 802 event.SetKeepEditable(true); 803 EXPECT_TRUE(event.keepEditable_); 804 } 805 count = count + 1; 806 }; 807 eventHub->SetOnSubmit(std::move(callback)); 808 809 bool forceCloseKeyboard = true; 810 TextInputAction action2 = TextInputAction::SEARCH; 811 textFieldPattern->PerformAction(action2, forceCloseKeyboard); 812 EXPECT_EQ(count, 1); 813 action2 = TextInputAction::NEW_LINE; 814 textFieldPattern->PerformAction(action2, forceCloseKeyboard); 815 EXPECT_EQ(count, 2); 816 action2 = TextInputAction::DONE; 817 textFieldPattern->PerformAction(action2, forceCloseKeyboard); 818 EXPECT_EQ(count, 3); 819 } 820 821 /** 822 * @tc.name: OnSubmitEvent002 823 * @tc.desc: Test Search onSubmit event 824 * @tc.type: FUNC 825 */ 826 HWTEST_F(SearchTestTwoNg, OnSubmitEvent002, TestSize.Level1) 827 { 828 SearchModelNG searchModelInstance; 829 auto frameNode = AceType::Claim(ViewStackProcessor::GetInstance()->GetMainFrameNode()); 830 ASSERT_NE(frameNode, nullptr); 831 auto pattern = frameNode->GetPattern<SearchPattern>(); 832 ASSERT_NE(pattern, nullptr); 833 auto eventHub = frameNode->GetEventHub<SearchEventHub>(); 834 ASSERT_NE(eventHub, nullptr); 835 eventHub->AttachHost(frameNode); 836 837 int count = 0; 838 TextFieldCommonEvent event2; __anond0d3067b0b02(const std::string& title, NG::TextFieldCommonEvent& event) 839 auto callback = [&count, &event2](const std::string& title, NG::TextFieldCommonEvent& event) { 840 event2 = event; 841 if (count > 0) { 842 event.SetKeepEditable(true); 843 EXPECT_TRUE(event.keepEditable_); 844 } 845 count = count + 1; 846 }; 847 eventHub->SetOnSubmit(std::move(callback)); 848 849 pattern->OnClickButtonAndImage(); 850 EXPECT_EQ(count, 1); 851 pattern->OnClickButtonAndImage(); 852 EXPECT_EQ(count, 2); 853 } 854 855 /** 856 * @tc.name: UpdateChangeEvent001 857 * @tc.desc: test search UpdateChangeEvent 858 * @tc.type: FUNC 859 */ 860 HWTEST_F(SearchTestTwoNg, UpdateChangeEvent001, TestSize.Level1) 861 { 862 SearchModelNG searchModelInstance; 863 auto frameNode =AceType::Claim(ViewStackProcessor::GetInstance()->GetMainFrameNode()); 864 ASSERT_NE(frameNode, nullptr); 865 auto eventHub = frameNode->GetEventHub<SearchEventHub>(); 866 ASSERT_NE(eventHub, nullptr); 867 eventHub->AttachHost(frameNode); __anond0d3067b0c02(const std::string str) 868 eventHub->onValueChangeEvent_ = [](const std::string str) {}; __anond0d3067b0d02(const std::string str) 869 eventHub->changeEvent_ = [](const std::string str) {}; 870 eventHub->UpdateChangeEvent(""); 871 } 872 873 /** 874 * @tc.name: PackInnerRecognizer001 875 * @tc.desc: test search PackInnerRecognizer 876 * @tc.type: FUNC 877 */ 878 HWTEST_F(SearchTestTwoNg, PackInnerRecognizerr001, TestSize.Level1) 879 { 880 /** 881 * @tc.steps: step1. Create SearchGestureEventHub. 882 */ 883 auto eventHub = AceType::MakeRefPtr<EventHub>(); 884 EXPECT_TRUE(eventHub); 885 auto searchgestureEventHub = AceType::MakeRefPtr<SearchGestureEventHub>(eventHub); 886 EXPECT_TRUE(searchgestureEventHub); 887 Offset offset; 888 std::list<RefPtr<NGGestureRecognizer>> innerRecognizers; 889 int32_t touchId = 0; 890 RefPtr<TargetComponent> targetComponent; 891 searchgestureEventHub->innerParallelRecognizer_ = nullptr; 892 searchgestureEventHub->CheckClickActuator(); 893 auto clickEventActuator = searchgestureEventHub->GetUserClickEventActuator(); __anond0d3067b0e02(GestureEvent& info) 894 GestureEventFunc callback = [](GestureEvent& info) {}; 895 clickEventActuator->SetUserCallback(std::move(callback)); 896 searchgestureEventHub->PackInnerRecognizer(offset, innerRecognizers, touchId, targetComponent); 897 searchgestureEventHub->PackInnerRecognizer(offset, innerRecognizers, touchId, targetComponent); 898 } 899 900 /** 901 * @tc.name: MinFontSize001 902 * @tc.desc: test search minFontSize 903 * @tc.type: FUNC 904 */ 905 HWTEST_F(SearchTestTwoNg, MinFontSize001, TestSize.Level1) 906 { 907 /** 908 * @tc.step: step1. create frameNode and pattern. 909 */ 910 SearchModelNG searchModelInstance; 911 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 912 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 913 frameNode->MarkModifyDone(); 914 auto textFieldFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(TEXTFIELD_INDEX)); 915 auto textFieldPattern = textFieldFrameNode->GetPattern<TextFieldPattern>(); 916 auto textFieldLayoutProperty = textFieldFrameNode->GetLayoutProperty<TextFieldLayoutProperty>(); 917 918 /** 919 * @tc.step: step2. set minFontSize 1.0 fp. 920 */ 921 searchModelInstance.SetAdaptMinFontSize(1.0_fp); 922 frameNode->MarkModifyDone(); 923 924 /** 925 * @tc.step: step3. test minFontSize 926 */ 927 EXPECT_EQ(textFieldLayoutProperty->GetAdaptMinFontSize(), 1.0_fp); 928 } 929 930 /** 931 * @tc.name: MaxFontSize001 932 * @tc.desc: test search maxFontSize 933 * @tc.type: FUNC 934 */ 935 HWTEST_F(SearchTestTwoNg, MaxFontSize001, TestSize.Level1) 936 { 937 /** 938 * @tc.step: step1. create frameNode and pattern. 939 */ 940 SearchModelNG searchModelInstance; 941 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 942 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 943 frameNode->MarkModifyDone(); 944 auto textFieldFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(TEXTFIELD_INDEX)); 945 auto textFieldLayoutProperty = textFieldFrameNode->GetLayoutProperty<TextFieldLayoutProperty>(); 946 947 /** 948 * @tc.step: step2. set maxFontSize 2.0 fp. 949 */ 950 searchModelInstance.SetAdaptMaxFontSize(2.0_fp); 951 frameNode->MarkModifyDone(); 952 953 /** 954 * @tc.step: step3. test maxFontSize 955 */ 956 EXPECT_EQ(textFieldLayoutProperty->GetAdaptMaxFontSize(), 2.0_fp); 957 } 958 959 /** 960 * @tc.name: SetHeight001 961 * @tc.desc: test search 962 * @tc.type: FUNC 963 */ 964 HWTEST_F(SearchTestTwoNg, SetProperty001, TestSize.Level1) 965 { 966 SearchModelNG searchModelInstance; 967 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 968 auto fNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 969 auto textFieldChild = AceType::DynamicCast<FrameNode>(fNode->GetChildren().front()); 970 ASSERT_NE(textFieldChild, nullptr); 971 auto textFieldLayoutProperty = textFieldChild->GetLayoutProperty<TextFieldLayoutProperty>(); 972 CHECK_NULL_VOID(textFieldLayoutProperty); 973 auto eventHub = textFieldChild->GetEventHub<TextFieldEventHub>(); 974 CHECK_NULL_VOID(eventHub); 975 auto pattern = textFieldChild->GetPattern<TextFieldPattern>(); 976 ASSERT_NE(pattern, nullptr); 977 978 //test SetHeight 979 searchModelInstance.SetHeight(Dimension(2.5, DimensionUnit::VP)); 980 981 //test SetOnChange __anond0d3067b0f02(const std::string str, PreviewText previewText) 982 searchModelInstance.SetOnChange([](const std::string str, PreviewText previewText) {}); 983 EXPECT_NE(eventHub->GetOnChange(), nullptr); 984 985 //test SetOnTextSelectionChange __anond0d3067b1002(int32_t a, int32_t b) 986 searchModelInstance.SetOnTextSelectionChange([](int32_t a, int32_t b) {}); 987 EXPECT_NE(eventHub->onSelectionChange_, nullptr); 988 989 //test SetOnScroll __anond0d3067b1102(float a, float b) 990 searchModelInstance.SetOnScroll([](float a, float b) {}); 991 EXPECT_NE(eventHub->onScrollChangeEvent_, nullptr); 992 993 //test SetSelectionMenuHidden 994 searchModelInstance.SetSelectionMenuHidden(true); 995 EXPECT_EQ(textFieldLayoutProperty->GetSelectionMenuHidden().value(), true); 996 997 //test SetOnCut __anond0d3067b1202(const std::string str) 998 searchModelInstance.SetOnCut([](const std::string str) {}); 999 EXPECT_NE(eventHub->onCut_, nullptr); 1000 1001 //test SetCustomKeyboard __anond0d3067b1302() 1002 searchModelInstance.SetCustomKeyboard([]() {}); 1003 EXPECT_NE(pattern->customKeyboardBuilder_, nullptr); 1004 1005 //test SetType 1006 searchModelInstance.SetType(TextInputType::BEGIN); 1007 EXPECT_EQ(textFieldLayoutProperty->GetTextInputType().value(), TextInputType::BEGIN); 1008 searchModelInstance.SetType(TextInputType::TEXT); 1009 EXPECT_EQ(textFieldLayoutProperty->GetTextInputType().value(), TextInputType::TEXT); 1010 } 1011 1012 /** 1013 * @tc.name: SetHeight002 1014 * @tc.desc: test search 1015 * @tc.type: FUNC 1016 */ 1017 HWTEST_F(SearchTestTwoNg, SetProperty002, TestSize.Level1) 1018 { 1019 SearchModelNG searchModelInstance; 1020 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 1021 auto fNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1022 FrameNode* frameNode = &(*fNode); 1023 auto textFieldChild = AceType::DynamicCast<FrameNode>(fNode->GetChildren().front()); 1024 ASSERT_NE(textFieldChild, nullptr); 1025 auto textFieldLayoutProperty = textFieldChild->GetLayoutProperty<TextFieldLayoutProperty>(); 1026 CHECK_NULL_VOID(textFieldLayoutProperty); 1027 auto pattern = textFieldChild->GetPattern<TextFieldPattern>(); 1028 ASSERT_NE(pattern, nullptr); 1029 1030 //test RequestKeyboardOnFocus 1031 searchModelInstance.RequestKeyboardOnFocus(frameNode, true); 1032 EXPECT_EQ(pattern->needToRequestKeyboardOnFocus_, true); 1033 1034 //test SetPlaceholderFont 1035 Font font; 1036 font.fontSize = Dimension(2); 1037 font.fontStyle = Ace::FontStyle::NORMAL; 1038 font.fontWeight = FontWeight::W200; 1039 std::vector<std::string> families = { "cursive" }; 1040 font.fontFamilies = families; 1041 searchModelInstance.SetPlaceholderFont(frameNode, font); 1042 EXPECT_EQ(textFieldLayoutProperty->GetPlaceholderFontWeight(), FontWeight::W200); 1043 1044 //test SetSearchIconSize 1045 auto searchLayoutProperty = fNode->GetLayoutProperty<SearchLayoutProperty>(); 1046 searchModelInstance.SetSearchIconSize(frameNode, Dimension(2.5, DimensionUnit::VP)); 1047 EXPECT_EQ(searchLayoutProperty->GetSearchIconUDSize(), 2.5_vp); 1048 1049 //test SetSearchSrcPath 1050 auto imageFrameNode = AceType::DynamicCast<FrameNode>(fNode->GetChildAtIndex(IMAGE_INDEX)); 1051 auto imageLayoutProperty = imageFrameNode->GetLayoutProperty<ImageLayoutProperty>(); 1052 searchModelInstance.SetSearchSrcPath(frameNode, EMPTY_VALUE); 1053 searchModelInstance.SetSearchSrcPath(frameNode, "/common/icon.png"); 1054 ASSERT_STREQ(imageLayoutProperty->GetImageSourceInfo()->GetSrc().c_str(), "/common/icon.png"); 1055 1056 //test SetSearchIconColor 1057 auto imageRenderProperty = imageFrameNode->GetPaintProperty<ImageRenderProperty>(); 1058 ImageSourceInfo imageSourceInfo("", Dimension(-1), Dimension(-1), InternalResource::ResourceId::CORRECT_SVG); 1059 imageLayoutProperty->UpdateImageSourceInfo(imageSourceInfo); 1060 searchModelInstance.SetSearchIconColor(frameNode, Color::RED); 1061 EXPECT_EQ(imageRenderProperty->GetSvgFillColor(), Color::RED); 1062 1063 //test SetSearchButton 1064 auto buttonFrameNode = AceType::DynamicCast<FrameNode>(fNode->GetChildAtIndex(BUTTON_INDEX)); 1065 CHECK_NULL_VOID(buttonFrameNode); 1066 auto searchButtonRenderContext = buttonFrameNode->GetRenderContext(); 1067 CHECK_NULL_VOID(searchButtonRenderContext); 1068 searchModelInstance.SetSearchButton(frameNode, EMPTY_VALUE); 1069 EXPECT_EQ(searchButtonRenderContext->GetOpacity(), 0.0); 1070 searchModelInstance.SetSearchButton(frameNode, PLACEHOLDER); 1071 EXPECT_EQ(searchButtonRenderContext->GetOpacity(), 1.0); 1072 1073 //test SetSearchButtonFontSize 1074 auto buttonLayoutProperty = buttonFrameNode->GetLayoutProperty<ButtonLayoutProperty>(); 1075 searchModelInstance.SetSearchButtonFontSize(frameNode, 14.0_vp); 1076 EXPECT_EQ(buttonLayoutProperty->GetFontSize(), 14.0_vp); 1077 1078 //test SetTextColor 1079 searchModelInstance.SetTextColor(frameNode, Color::RED); 1080 EXPECT_EQ(textFieldLayoutProperty->GetTextColor(), Color::RED); 1081 } 1082 1083 /** 1084 * @tc.name: SetHeight003 1085 * @tc.desc: test search 1086 * @tc.type: FUNC 1087 */ 1088 HWTEST_F(SearchTestTwoNg, SetProperty003, TestSize.Level1) 1089 { 1090 SearchModelNG searchModelInstance; 1091 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 1092 auto fNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1093 FrameNode* frameNode = &(*fNode); 1094 auto textFieldChild = AceType::DynamicCast<FrameNode>(fNode->GetChildren().front()); 1095 auto textFieldLayoutProperty = textFieldChild->GetLayoutProperty<TextFieldLayoutProperty>(); 1096 1097 //test SetSearchButtonFontColor 1098 auto buttonFNode = AceType::DynamicCast<FrameNode>(fNode->GetChildAtIndex(BUTTON_INDEX)); 1099 auto bnLayoutProperty = buttonFNode->GetLayoutProperty<ButtonLayoutProperty>(); 1100 searchModelInstance.SetSearchButtonFontColor(frameNode, Color::RED); 1101 EXPECT_EQ(bnLayoutProperty->GetFontColor(), Color::RED); 1102 1103 //test SetCopyOption 1104 searchModelInstance.SetCopyOption(frameNode, CopyOptions::Distributed); 1105 EXPECT_EQ(textFieldLayoutProperty->GetCopyOptions(), OHOS::Ace::CopyOptions::Distributed); 1106 1107 //test SetTextFont 1108 Font font; 1109 font.fontSize = Dimension(2); 1110 font.fontStyle = Ace::FontStyle::NORMAL; 1111 font.fontWeight = FontWeight::W200; 1112 std::vector<std::string> families = { "cursive" }; 1113 font.fontFamilies = families; 1114 searchModelInstance.SetTextFont(frameNode, font); 1115 EXPECT_EQ(textFieldLayoutProperty->GetFontWeight(), FontWeight::W200); 1116 1117 //test SetPlaceholderColor 1118 searchModelInstance.SetPlaceholderColor(frameNode, Color::RED); 1119 EXPECT_EQ(textFieldLayoutProperty->GetPlaceholderTextColor(), Color::RED); 1120 1121 //test SetSelectionMenuHidden 1122 searchModelInstance.SetSelectionMenuHidden(frameNode, true); 1123 EXPECT_EQ(textFieldLayoutProperty->GetSelectionMenuHidden(), true); 1124 1125 //test SetCaretWidth 1126 auto paintProperty = textFieldChild->GetPaintProperty<TextFieldPaintProperty>(); 1127 searchModelInstance.SetCaretWidth(frameNode, Dimension(2.5, DimensionUnit::VP)); 1128 EXPECT_EQ(paintProperty->GetCursorWidth().value().Value(), 2.5); 1129 1130 //test SetCaretColor 1131 searchModelInstance.SetCaretColor(frameNode, Color::BLUE); 1132 searchModelInstance.SetTextAlign(frameNode, TextAlign::CENTER); 1133 1134 //test SetCancelButtonStyle 1135 searchModelInstance.SetCancelButtonStyle(frameNode, CancelButtonStyle::CONSTANT); 1136 fNode->MarkModifyDone(); 1137 auto searchLayoutProperty = fNode->GetLayoutProperty<SearchLayoutProperty>(); 1138 EXPECT_EQ(searchLayoutProperty->GetCancelButtonStyle(), CancelButtonStyle::CONSTANT); 1139 searchModelInstance.SetCancelButtonStyle(frameNode, CancelButtonStyle::INVISIBLE); 1140 fNode->MarkModifyDone(); 1141 EXPECT_EQ(searchLayoutProperty->GetCancelButtonStyle(), CancelButtonStyle::INVISIBLE); 1142 1143 //test SetCancelIconSize 1144 searchModelInstance.SetCancelIconSize(frameNode, 14.0_vp); 1145 EXPECT_EQ(searchLayoutProperty->GetCancelButtonUDSize(), 14.0_vp); 1146 1147 //test SetCancelIconColor 1148 auto imageFNode = AceType::DynamicCast<FrameNode>(fNode->GetChildAtIndex(CANCEL_IMAGE_INDEX)); 1149 auto imageRProperty = imageFNode->GetPaintProperty<ImageRenderProperty>(); 1150 searchModelInstance.SetCancelIconColor(frameNode, Color::RED); 1151 EXPECT_EQ(imageRProperty->GetSvgFillColor(), Color::RED); 1152 1153 //test SetRightIconSrcPath 1154 auto cancelImageLayoutProperty = imageFNode->GetLayoutProperty<ImageLayoutProperty>(); 1155 searchModelInstance.SetRightIconSrcPath(frameNode, ""); 1156 ASSERT_STREQ(cancelImageLayoutProperty->GetImageSourceInfo()->GetSrc().c_str(), "resource:///ohos_test_image.svg"); 1157 1158 //test SetEnterKeyType 1159 searchModelInstance.SetSearchEnterKeyType(frameNode, TextInputAction::NEXT); 1160 auto textFieldPattern = textFieldChild->GetPattern<TextFieldPattern>(); 1161 EXPECT_EQ(TextInputAction::NEXT, textFieldPattern->GetTextInputActionValue(TextInputAction::UNSPECIFIED)); 1162 } 1163 1164 /** 1165 * @tc.name: SetEnterKeyType001 1166 * @tc.desc: test search set enterKeyType default value 1167 * @tc.type: FUNC 1168 */ 1169 HWTEST_F(SearchTestTwoNg, SetEnterKeyType001, TestSize.Level1) 1170 { 1171 SearchModelNG searchModelInstance; 1172 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 1173 auto fNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1174 FrameNode* frameNode = &(*fNode); 1175 searchModelInstance.SetSearchEnterKeyType(frameNode, TextInputAction::UNSPECIFIED); 1176 auto textFieldChild = AceType::DynamicCast<FrameNode>(fNode->GetChildren().front()); 1177 auto textFieldPattern = textFieldChild->GetPattern<TextFieldPattern>(); 1178 EXPECT_EQ(TextInputAction::SEARCH, textFieldPattern->GetTextInputActionValue(TextInputAction::UNSPECIFIED)); 1179 } 1180 1181 /** 1182 * @tc.name: LetterSpacing001 1183 * @tc.desc: test search letterSpacing 1184 * @tc.type: FUNC 1185 */ 1186 HWTEST_F(SearchTestTwoNg, LetterSpacing001, TestSize.Level1) 1187 { 1188 /** 1189 * @tc.step: step1. create frameNode and pattern. 1190 */ 1191 SearchModelNG searchModelInstance; 1192 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 1193 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1194 frameNode->MarkModifyDone(); 1195 auto pattern = frameNode->GetPattern<SearchPattern>(); 1196 auto textFieldFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(TEXTFIELD_INDEX)); 1197 auto textFieldPattern = textFieldFrameNode->GetPattern<TextFieldPattern>(); 1198 auto textFieldLayoutProperty = textFieldFrameNode->GetLayoutProperty<TextFieldLayoutProperty>(); 1199 1200 /** 1201 * @tc.step: step2. set letterSpacing 1.0 fp. 1202 */ 1203 searchModelInstance.SetLetterSpacing(1.0_fp); 1204 frameNode->MarkModifyDone(); 1205 1206 /** 1207 * @tc.step: step3. test letterSpacing 1208 */ 1209 EXPECT_EQ(textFieldLayoutProperty->GetLetterSpacing(), 1.0_fp); 1210 } 1211 1212 /** 1213 * @tc.name: LineHeight001 1214 * @tc.desc: test search lineHeight 1215 * @tc.type: FUNC 1216 */ 1217 HWTEST_F(SearchTestTwoNg, LineHeight001, TestSize.Level1) 1218 { 1219 /** 1220 * @tc.step: step1. create frameNode and pattern. 1221 */ 1222 SearchModelNG searchModelInstance; 1223 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 1224 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1225 frameNode->MarkModifyDone(); 1226 auto pattern = frameNode->GetPattern<SearchPattern>(); 1227 auto textFieldFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(TEXTFIELD_INDEX)); 1228 auto textFieldPattern = textFieldFrameNode->GetPattern<TextFieldPattern>(); 1229 auto textFieldLayoutProperty = textFieldFrameNode->GetLayoutProperty<TextFieldLayoutProperty>(); 1230 1231 /** 1232 * @tc.step: step2. set lineHeight 2.0 fp. 1233 */ 1234 searchModelInstance.SetLineHeight(2.0_fp); 1235 frameNode->MarkModifyDone(); 1236 1237 /** 1238 * @tc.step: step3. test lineHeight 1239 */ 1240 EXPECT_EQ(textFieldLayoutProperty->GetLineHeight(), 2.0_fp); 1241 } 1242 1243 /** 1244 * @tc.name: TextDecoration001 1245 * @tc.desc: test search decoration 1246 * @tc.type: FUNC 1247 */ 1248 HWTEST_F(SearchTestTwoNg, TextDecoration001, TestSize.Level1) 1249 { 1250 /** 1251 * @tc.step: step1. create frameNode and pattern. 1252 */ 1253 SearchModelNG searchModelInstance; 1254 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 1255 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1256 frameNode->MarkModifyDone(); 1257 auto pattern = frameNode->GetPattern<SearchPattern>(); 1258 auto textFieldFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(TEXTFIELD_INDEX)); 1259 auto textFieldPattern = textFieldFrameNode->GetPattern<TextFieldPattern>(); 1260 auto textFieldLayoutProperty = textFieldFrameNode->GetLayoutProperty<TextFieldLayoutProperty>(); 1261 /** 1262 * @tc.step: step2. set decoration Ace::TextDecoration::UNDERLINE. 1263 */ 1264 searchModelInstance.SetTextDecoration(Ace::TextDecoration::UNDERLINE); 1265 frameNode->MarkModifyDone(); 1266 searchModelInstance.SetTextDecorationColor(Color::BLUE); 1267 frameNode->MarkModifyDone(); 1268 searchModelInstance.SetTextDecorationStyle(Ace::TextDecorationStyle::DASHED); 1269 frameNode->MarkModifyDone(); 1270 /** 1271 * @tc.step: step3. test decoration 1272 */ 1273 EXPECT_EQ(textFieldLayoutProperty->GetTextDecoration(), Ace::TextDecoration::UNDERLINE); 1274 EXPECT_EQ(textFieldLayoutProperty->GetTextDecorationColor(), Color::BLUE); 1275 EXPECT_EQ(textFieldLayoutProperty->GetTextDecorationStyle(), Ace::TextDecorationStyle::DASHED); 1276 } 1277 1278 /** 1279 * @tc.name: UpdateFontFeature 1280 * @tc.desc: test fontFeature 1281 * @tc.type: FUNC 1282 */ 1283 HWTEST_F(SearchTestTwoNg, SetProperty004, TestSize.Level1) 1284 { 1285 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1286 ASSERT_NE(frameNode, nullptr); 1287 auto layoutProperty = frameNode->GetLayoutProperty<SearchLayoutProperty>(); 1288 SearchModelNG searchModelInstance; 1289 searchModelInstance.SetFontFeature(FONT_FEATURE_VALUE_1); 1290 EXPECT_EQ(layoutProperty->GetFontFeature(), FONT_FEATURE_VALUE_1); 1291 1292 layoutProperty->UpdateFontFeature(ParseFontFeatureSettings("\"ss01\" 0")); 1293 SearchModelNG::SetFontFeature(frameNode, FONT_FEATURE_VALUE_1); 1294 EXPECT_EQ(layoutProperty->GetFontFeature(), FONT_FEATURE_VALUE_1); 1295 } 1296 1297 /** 1298 * @tc.name: UpdateFontFeature 1299 * @tc.desc: test fontFeature 1300 * @tc.type: FUNC 1301 */ 1302 HWTEST_F(SearchTestTwoNg, SetProperty005, TestSize.Level1) 1303 { 1304 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1305 ASSERT_NE(frameNode, nullptr); 1306 auto layoutProperty = frameNode->GetLayoutProperty<SearchLayoutProperty>(); 1307 SearchModelNG searchModelInstance; 1308 searchModelInstance.SetFontFeature(FONT_FEATURE_VALUE_0); 1309 EXPECT_EQ(layoutProperty->GetFontFeature(), FONT_FEATURE_VALUE_0); 1310 1311 layoutProperty->UpdateFontFeature(ParseFontFeatureSettings("\"ss01\" 1")); 1312 SearchModelNG::SetFontFeature(frameNode, FONT_FEATURE_VALUE_0); 1313 EXPECT_EQ(layoutProperty->GetFontFeature(), FONT_FEATURE_VALUE_0); 1314 } 1315 1316 /** 1317 * @tc.name: SupportAvoidanceTest 1318 * @tc.desc: test whether the custom keyboard supports the collision avoidance function 1319 * @tc.type: FUNC 1320 */ 1321 HWTEST_F(SearchTestTwoNg, SupportAvoidanceTest, TestSize.Level1) 1322 { 1323 /** 1324 * @tc.step: step1. get frameNode and pattern. 1325 */ 1326 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1327 ASSERT_NE(frameNode, nullptr); 1328 auto textFieldFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(TEXTFIELD_INDEX)); 1329 ASSERT_NE(textFieldFrameNode, nullptr); 1330 auto textFieldPattern = textFieldFrameNode->GetPattern<TextFieldPattern>(); 1331 ASSERT_NE(textFieldPattern, nullptr); 1332 auto supportAvoidance = true; 1333 textFieldPattern->SetCustomKeyboardOption(supportAvoidance); 1334 EXPECT_TRUE(textFieldPattern->keyboardAvoidance_); 1335 supportAvoidance = false; 1336 textFieldPattern->SetCustomKeyboardOption(supportAvoidance); 1337 EXPECT_FALSE(textFieldPattern->keyboardAvoidance_); 1338 } 1339 1340 /** 1341 * @tc.name: SearchTypeToString001 1342 * @tc.desc: test search pattern UpdateInspectorId 1343 * @tc.type: FUNC 1344 */ 1345 HWTEST_F(SearchTestTwoNg, SearchTypeToString001, TestSize.Level1) 1346 { 1347 /** 1348 * @tc.step: step1. create frameNode and pattern. 1349 */ 1350 SearchModelNG searchModelInstance; 1351 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 1352 /** 1353 * @tc.step: step2. Call SearchTypeToString. 1354 */ 1355 searchModelInstance.SetType(TextInputType::NUMBER); 1356 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1357 frameNode->MarkModifyDone(); 1358 auto pattern = frameNode->GetPattern<SearchPattern>(); 1359 EXPECT_EQ(pattern->SearchTypeToString(), "SearchType.NUMBER"); 1360 } 1361 1362 HWTEST_F(SearchTestTwoNg, SearchTypeToString002, TestSize.Level1) 1363 { 1364 SearchModelNG searchModelInstance; 1365 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 1366 searchModelInstance.SetType(TextInputType::EMAIL_ADDRESS); 1367 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1368 frameNode->MarkModifyDone(); 1369 auto pattern = frameNode->GetPattern<SearchPattern>(); 1370 EXPECT_EQ(pattern->SearchTypeToString(), "SearchType.EMAIL"); 1371 } 1372 1373 HWTEST_F(SearchTestTwoNg, SearchTypeToString003, TestSize.Level1) 1374 { 1375 SearchModelNG searchModelInstance; 1376 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 1377 searchModelInstance.SetType(TextInputType::PHONE); 1378 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1379 frameNode->MarkModifyDone(); 1380 auto pattern = frameNode->GetPattern<SearchPattern>(); 1381 EXPECT_EQ(pattern->SearchTypeToString(), "SearchType.PHONE_NUMBER"); 1382 } 1383 1384 HWTEST_F(SearchTestTwoNg, SearchTypeToString004, TestSize.Level1) 1385 { 1386 SearchModelNG searchModelInstance; 1387 searchModelInstance.Create(EMPTY_VALUE, PLACEHOLDER, SEARCH_SVG); 1388 searchModelInstance.SetType(TextInputType::URL); 1389 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1390 frameNode->MarkModifyDone(); 1391 auto pattern = frameNode->GetPattern<SearchPattern>(); 1392 EXPECT_EQ(pattern->SearchTypeToString(), "SearchType.URL"); 1393 } 1394 1395 /** 1396 * @tc.name: PatternOnColorConfigurationUpdate012 1397 * @tc.desc: Test pttern HandleTextContentLines 1398 * @tc.type: FUNC 1399 */ 1400 HWTEST_F(SearchTestTwoNg, PatternOnColorConfigurationUpdate012, TestSize.Level1) 1401 { 1402 /** 1403 * @tc.step: step1. create frameNode and pattern. 1404 */ 1405 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1406 ASSERT_NE(frameNode, nullptr); 1407 auto textFieldFrameNode = AceType::DynamicCast<FrameNode>(frameNode->GetChildAtIndex(TEXTFIELD_INDEX)); 1408 CHECK_NULL_VOID(textFieldFrameNode); 1409 1410 /** 1411 * @tc.step: step2. create textFieldPattern and searchPattern. 1412 */ 1413 auto textFieldPattern = textFieldFrameNode->GetPattern<TextFieldPattern>(); 1414 CHECK_NULL_VOID(textFieldPattern); 1415 textFieldPattern->UpdateEditingValue("", 0); 1416 auto pattern = frameNode->GetPattern<SearchPattern>(); 1417 ASSERT_NE(pattern, nullptr); 1418 1419 /** 1420 * @tc.step: step3. call HandleTextContentLines. 1421 * @tc.expected: cover branch IsOperation is false and call HandleTextContentLines 1422 */ 1423 int32_t result = pattern->HandleTextContentLines(); 1424 EXPECT_EQ(result, 0); 1425 1426 /** 1427 * @tc.step: step4. call HandleTextContentLines. 1428 * @tc.expected: cover branch IsOperation is true and GetLineHeight value is 0. 1429 */ 1430 textFieldPattern->UpdateEditingValue("aaa", 0); 1431 result = pattern->HandleTextContentLines(); 1432 EXPECT_EQ(result, 0); 1433 pattern->HandleCaretPosition(3); // 3 is caret index 1434 pattern->HandleGetCaretPosition(); 1435 auto index = pattern->HandleGetCaretIndex(); 1436 ASSERT_EQ(index, 3); // 3 is caret index 1437 1438 /** 1439 * @tc.step: step5. call HandleTextContentLines. 1440 * @tc.expected: cover branch IsOperation is true and GetLineHeight value is not 0. 1441 */ 1442 textFieldPattern->UpdateEditingValue("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 45); 1443 pattern->HandleCaretPosition(6); 1444 result = pattern->HandleTextContentLines(); 1445 EXPECT_EQ(result, 0); 1446 } 1447 1448 /** 1449 * @tc.name: Pattern003 1450 * @tc.desc: UpdateChangeEvent and ToJsonValue while cancel button style is different 1451 * @tc.type: FUNC 1452 */ 1453 HWTEST_F(SearchTestTwoNg, Pattern003, TestSize.Level1) 1454 { 1455 SearchModelNG searchModelInstance; 1456 searchModelInstance.SetCancelButtonStyle(CancelButtonStyle::CONSTANT); 1457 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1458 ASSERT_NE(frameNode, nullptr); 1459 auto layoutProperty = frameNode->GetLayoutProperty<SearchLayoutProperty>(); 1460 auto pattern = frameNode->GetPattern<SearchPattern>(); 1461 std::unique_ptr<JsonValue> json = std::make_unique<JsonValue>(); 1462 ASSERT_NE(pattern, nullptr); 1463 1464 pattern->UpdateChangeEvent("search"); 1465 pattern->ToJsonValue(json, filter); 1466 EXPECT_EQ(layoutProperty->GetCancelButtonStyle(), CancelButtonStyle::CONSTANT); 1467 } 1468 1469 /** 1470 * @tc.name: Pattern004 1471 * @tc.desc: UpdateChangeEvent and ToJsonValue while cancel button style is different 1472 * @tc.type: FUNC 1473 */ 1474 HWTEST_F(SearchTestTwoNg, Pattern004, TestSize.Level1) 1475 { 1476 SearchModelNG searchModelInstance; 1477 searchModelInstance.SetCancelButtonStyle(CancelButtonStyle::INVISIBLE); 1478 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1479 ASSERT_NE(frameNode, nullptr); 1480 auto layoutProperty = frameNode->GetLayoutProperty<SearchLayoutProperty>(); 1481 auto pattern = frameNode->GetPattern<SearchPattern>(); 1482 std::unique_ptr<JsonValue> json = std::make_unique<JsonValue>(); 1483 ASSERT_NE(pattern, nullptr); 1484 1485 pattern->UpdateChangeEvent(""); 1486 pattern->ToJsonValue(json, filter); 1487 EXPECT_EQ(layoutProperty->GetCancelButtonStyle(), CancelButtonStyle::INVISIBLE); 1488 } 1489 1490 /** 1491 * @tc.name: PatternHandleFocusEvent001 1492 * @tc.desc: Test HandleFocusEvent 1493 * @tc.type: FUNC 1494 */ 1495 HWTEST_F(SearchTestTwoNg, PatternHandleFocusEvent001, TestSize.Level1) 1496 { 1497 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); 1498 frameNode->MarkModifyDone(); 1499 auto pattern = frameNode->GetPattern<SearchPattern>(); 1500 bool backwardFocusMovement = true; 1501 bool forwardFocusMovement = true; 1502 pattern -> HandleFocusEvent(forwardFocusMovement, backwardFocusMovement); 1503 EXPECT_EQ(pattern->focusChoice_, SearchPattern::FocusChoice::SEARCH); 1504 } 1505 1506 } // namespace OHOS::Ace::NG 1507