• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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