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