• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2023 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 <cmath>
17 #include <cstddef>
18 #include <memory>
19 #include <optional>
20 #include <string>
21 #include <utility>
22 #include <vector>
23 
24 #include "gmock/gmock-actions.h"
25 #include "gtest/gtest.h"
26 
27 #define private public
28 #define protected public
29 #include "test/mock/core/common/mock_theme_manager.h"
30 #include "test/mock/core/pipeline/mock_pipeline_context.h"
31 #include "test/mock/core/render/mock_media_player.h"
32 #include "test/mock/core/render/mock_render_context.h"
33 
34 #include "base/geometry/ng/size_t.h"
35 #include "base/json/json_util.h"
36 #include "base/memory/ace_type.h"
37 #include "base/resource/internal_resource.h"
38 #include "core/common/ai/image_analyzer_mgr.h"
39 #include "core/components/common/layout/constants.h"
40 #include "core/components/video/video_theme.h"
41 #include "core/components/video/video_utils.h"
42 #include "core/components_ng/base/frame_node.h"
43 #include "core/components_ng/base/view_stack_processor.h"
44 #include "core/components_ng/event/drag_event.h"
45 #include "core/components_ng/layout/layout_algorithm.h"
46 #include "core/components_ng/pattern/image/image_layout_property.h"
47 #include "core/components_ng/pattern/linear_layout/linear_layout_property.h"
48 #include "core/components_ng/pattern/root/root_pattern.h"
49 #include "core/components_ng/pattern/text/text_layout_property.h"
50 #include "core/components_ng/pattern/text/text_pattern.h"
51 #include "core/components_ng/pattern/video/video_full_screen_node.h"
52 #include "core/components_ng/pattern/video/video_full_screen_pattern.h"
53 #include "core/components_ng/pattern/video/video_layout_algorithm.h"
54 #include "core/components_ng/pattern/video/video_layout_property.h"
55 #include "core/components_ng/pattern/video/video_model_ng.h"
56 #include "core/components_ng/pattern/video/video_node.h"
57 #include "core/components_ng/pattern/video/video_pattern.h"
58 #include "core/components_ng/pattern/video/video_styles.h"
59 #include "core/components_v2/inspector/inspector_constants.h"
60 #include "core/image/image_source_info.h"
61 
62 using namespace testing;
63 using namespace testing::ext;
64 
65 namespace OHOS::Ace::NG {
66 struct TestProperty {
67     std::optional<std::string> src;
68     std::optional<double> progressRate;
69     std::optional<std::string> posterUrl;
70     std::optional<bool> muted;
71     std::optional<bool> autoPlay;
72     std::optional<bool> controls;
73     std::optional<bool> loop;
74     std::optional<ImageFit> objectFit;
75     std::optional<RefPtr<VideoControllerV2>> videoController;
76 };
77 namespace {
78 constexpr double VIDEO_PROGRESS_RATE = 1.0;
79 constexpr bool MUTED_VALUE = false;
80 constexpr bool AUTO_PLAY = false;
81 constexpr bool CONTROL_VALUE = true;
82 constexpr bool LOOP_VALUE = false;
83 const ImageFit VIDEO_IMAGE_FIT = ImageFit::COVER;
84 const std::string VIDEO_SRC = "common/video.mp4";
85 const std::string VIDEO_POSTER_URL = "common/img2.png";
86 const std::string VIDEO_START_EVENT = "start";
87 const std::string VIDEO_PAUSE_EVENT = "pause";
88 const std::string VIDEO_FINISH_EVENT = "finish";
89 const std::string VIDEO_ERROR_EVENT = "error";
90 const std::string VIDEO_PREPARED_EVENT = "prepared";
91 const std::string VIDEO_SEEKING_EVENT = "seeking";
92 const std::string VIDEO_SEEKED_EVENT = "seeked";
93 const std::string VIDEO_UPDATE_EVENT = "update";
94 const std::string VIDEO_FULLSCREEN_EVENT = "fullScreen";
95 const std::string EXTRA_INFO_KEY = "extraInfo";
96 const std::string VIDEO_ERROR_ID = "";
97 const std::string VIDEO_CALLBACK_RESULT = "result_ok";
98 const std::string VIDEO_STOP_EVENT = "stop";
99 constexpr float MAX_WIDTH = 400.0f;
100 constexpr float MAX_HEIGHT = 400.0f;
101 constexpr float VIDEO_WIDTH = 300.0f;
102 constexpr float VIDEO_HEIGHT = 300.0f;
103 constexpr float SCREEN_WIDTH_SMALL = 500.0f;
104 constexpr float SCREEN_HEIGHT_SMALL = 1000.0f;
105 constexpr float SCREEN_WIDTH_MEDIUM = 1000.0f;
106 constexpr float SCREEN_HEIGHT_MEDIUM = 2000.0f;
107 constexpr float SCREEN_WIDTH_LARGE = 1500.0f;
108 constexpr float SCREEN_HEIGHT_LARGE = 2500.0f;
109 const SizeF MAX_SIZE(MAX_WIDTH, MAX_HEIGHT);
110 const SizeF SCREEN_SIZE_SMALL(SCREEN_WIDTH_SMALL, SCREEN_HEIGHT_SMALL);
111 const SizeF SCREEN_SIZE_MEDIUM(SCREEN_WIDTH_MEDIUM, SCREEN_HEIGHT_MEDIUM);
112 const SizeF SCREEN_SIZE_LARGE(SCREEN_WIDTH_LARGE, SCREEN_HEIGHT_LARGE);
113 const SizeF VIDEO_SIZE(VIDEO_WIDTH, VIDEO_HEIGHT);
114 const SizeF LAYOUT_SIZE_RATIO_GREATER_THAN_1(MAX_WIDTH, VIDEO_HEIGHT);
115 const SizeF LAYOUT_SIZE_RATIO_LESS_THAN_1(VIDEO_WIDTH, MAX_HEIGHT);
116 const SizeF INVALID_SIZE(MAX_WIDTH, 0.0f);
117 TestProperty g_testProperty;
118 } // namespace
119 
120 class VideoTestAddNg : public testing::Test {
121 public:
122     static void SetUpTestSuite();
123     static void TearDownTestSuite();
124     void SetUp();
TearDown()125     void TearDown() {}
126 
127 protected:
128     static RefPtr<FrameNode> CreateVideoNode(TestProperty& g_testProperty);
129 };
130 
SetUpTestSuite()131 void VideoTestAddNg::SetUpTestSuite()
132 {
133     g_testProperty.progressRate = VIDEO_PROGRESS_RATE;
134     g_testProperty.muted = MUTED_VALUE;
135     g_testProperty.autoPlay = AUTO_PLAY;
136     g_testProperty.controls = CONTROL_VALUE;
137     g_testProperty.loop = LOOP_VALUE;
138     g_testProperty.objectFit = VIDEO_IMAGE_FIT;
139     MockPipelineContext::SetUp();
140     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
141     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
142     MockPipelineContext::GetCurrent()->rootNode_ = FrameNode::CreateFrameNodeWithTree(
143         V2::ROOT_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<RootPattern>());
144     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<VideoTheme>()));
145 }
146 
TearDownTestSuite()147 void VideoTestAddNg::TearDownTestSuite()
148 {
149     MockPipelineContext::TearDown();
150 }
SetUp()151 void VideoTestAddNg::SetUp()
152 {
153     ViewStackProcessor::GetInstance()->ClearStack();
154 }
155 
CreateVideoNode(TestProperty & g_testProperty)156 RefPtr<FrameNode> VideoTestAddNg::CreateVideoNode(TestProperty& g_testProperty)
157 {
158     if (g_testProperty.videoController.has_value()) {
159         VideoModelNG().Create(g_testProperty.videoController.value());
160     } else {
161         auto videoController = AceType::MakeRefPtr<VideoControllerV2>();
162         VideoModelNG().Create(videoController);
163     }
164     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
165     CHECK_NULL_RETURN(frameNode, nullptr);
166     auto videoPattern = AceType::DynamicCast<VideoPattern>(frameNode->GetPattern());
167     CHECK_NULL_RETURN(videoPattern, nullptr);
168     EXPECT_CALL(*(AceType::DynamicCast<MockMediaPlayer>(videoPattern->mediaPlayer_)), IsMediaPlayerValid())
169         .WillRepeatedly(Return(true));
170 
171     if (g_testProperty.src.has_value()) {
172         VideoModelNG().SetSrc(g_testProperty.src.value());
173     }
174     if (g_testProperty.progressRate.has_value()) {
175         VideoModelNG().SetProgressRate(g_testProperty.progressRate.value());
176     }
177     if (g_testProperty.posterUrl.has_value()) {
178         VideoModelNG().SetPosterSourceInfo(g_testProperty.posterUrl.value(), "", "");
179     }
180     if (g_testProperty.muted.has_value()) {
181         VideoModelNG().SetMuted(g_testProperty.muted.value());
182     }
183     if (g_testProperty.autoPlay.has_value()) {
184         VideoModelNG().SetAutoPlay(g_testProperty.autoPlay.value());
185     }
186     if (g_testProperty.controls.has_value()) {
187         VideoModelNG().SetControls(g_testProperty.controls.value());
188     }
189     if (g_testProperty.loop.has_value()) {
190         VideoModelNG().SetLoop(g_testProperty.loop.value());
191     }
192     if (g_testProperty.objectFit.has_value()) {
193         VideoModelNG().SetObjectFit(g_testProperty.objectFit.value());
194     }
195 
196     auto element = ViewStackProcessor::GetInstance()->GetMainFrameNode();
197     return AceType::Claim(element);
198 }
199 
200 /**
201  * @tc.name: VideoPropertyTest001
202  * @tc.desc: Create Vdeo, and set its properties.
203  * @tc.type: FUNC
204  */
205 HWTEST_F(VideoTestAddNg, OnPlayerStatusTest001, TestSize.Level1)
206 {
207     auto themeManager1 = AceType::MakeRefPtr<MockThemeManager>();
208     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager1);
209     EXPECT_CALL(*themeManager1, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<VideoTheme>()));
210     /**
211      * @tc.steps: step1. Create Video
212      * @tc.expected: step1. Create Video successfully
213      */
214     auto frameNode = CreateVideoNode(g_testProperty);
215     ASSERT_TRUE(frameNode);
216     EXPECT_EQ(frameNode->GetTag(), V2::VIDEO_ETS_TAG);
217     auto pattern = frameNode->GetPattern<VideoPattern>();
218     ASSERT_TRUE(pattern);
219 
220     /**
221      * @tc.steps: step2. Prepare the childNode & videoEvent
222      */
223     auto controlBar = frameNode->GetChildAtIndex(2);
224     ASSERT_TRUE(controlBar);
225 
226     auto playBtn = AceType::DynamicCast<FrameNode>(controlBar->GetChildAtIndex(0));
227     ASSERT_TRUE(playBtn);
228     auto playBtnGestureEventHub = playBtn->GetOrCreateGestureEventHub();
229     ASSERT_TRUE(playBtnGestureEventHub);
230 
231     // set videoEvent
232     auto videoEventHub = frameNode->GetEventHub<VideoEventHub>();
233     ASSERT_TRUE(videoEventHub);
234     std::string startCheck;
__anon130987530202(const std::string& ) 235     VideoEventCallback onStart = [&startCheck](const std::string& /* param */) { startCheck = VIDEO_START_EVENT; };
236     std::string pauseCheck;
__anon130987530302(const std::string& ) 237     VideoEventCallback onPause = [&pauseCheck](const std::string& /* param */) { pauseCheck = VIDEO_PAUSE_EVENT; };
238     std::string finishCheck;
__anon130987530402(const std::string& ) 239     VideoEventCallback onFinish = [&finishCheck](const std::string& /* param */) { finishCheck = VIDEO_FINISH_EVENT; };
240     std::string stopCheck;
__anon130987530502(const std::string& ) 241     VideoEventCallback onStop = [&stopCheck](const std::string& /* param */) { stopCheck = VIDEO_STOP_EVENT; };
242     videoEventHub->SetOnStart(std::move(onStart));
243     videoEventHub->SetOnPause(std::move(onPause));
244     videoEventHub->SetOnFinish(std::move(onFinish));
245     videoEventHub->SetOnStop(std::move(onStop));
246 
247     /**
248      * @tc.steps: step3. Call OnPlayerStatus status == STARTED
249      * @tc.expected: step3. FireStartEvent has called and playBtn event will call pattern->Pause()
250      */
251     pattern->OnPlayerStatus(PlaybackStatus::STARTED);
252     EXPECT_EQ(startCheck, VIDEO_START_EVENT);
253     // will call pattern->Pause()
254     EXPECT_TRUE(pattern->isPlaying_);
255     // case1: MediaPlayer is invalid
256     auto flag = playBtnGestureEventHub->ActClick();
257     EXPECT_TRUE(flag);
258 
259     /**
260      * @tc.steps: step4. Call OnPlayerStatus status == PREPARED
261      * @tc.expected: step4. FirePauseEvent & mediaPlayer->GetDuration() has called
262      */
263     // case1: MediaPlayer is invalid
264     pattern->OnPlayerStatus(PlaybackStatus::PAUSED);
265     EXPECT_EQ(pauseCheck, VIDEO_PAUSE_EVENT);
266 
267     /**
268      * @tc.steps: step5. Call OnPlayerStatus status == PLAYBACK_COMPLETE
269      * @tc.expected: step5. FireFinishEvent & OnUpdateTime(pos = CURRENT_POS) will be called
270      */
271     pattern->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case1: controls = true
272     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
273     auto videoLayoutProperty = pattern->GetLayoutProperty<VideoLayoutProperty>();
274     videoLayoutProperty->UpdateControls(false);
275     pattern->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case2: controls = false
276     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
277     pattern->OnPlayerStatus(PlaybackStatus::ERROR);
278     pattern->OnPlayerStatus(PlaybackStatus::IDLE);
279     pattern->OnPlayerStatus(PlaybackStatus::PREPARED);
280     pattern->OnPlayerStatus(PlaybackStatus::PAUSED);
281     pattern->OnPlayerStatus(PlaybackStatus::STOPPED);
282     EXPECT_EQ(stopCheck, VIDEO_STOP_EVENT);
283     pattern->OnPlayerStatus(PlaybackStatus::NONE);
284 }
285 
286 /**
287  * @tc.name: VideoPropertyTest002
288  * @tc.desc: Create Vdeo, and set its properties.
289  * @tc.type: FUNC
290  */
291 HWTEST_F(VideoTestAddNg, OnPlayerStatusTest002, TestSize.Level1)
292 {
293     auto themeManager2 = AceType::MakeRefPtr<MockThemeManager>();
294     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager2);
295     EXPECT_CALL(*themeManager2, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<VideoTheme>()));
296     /**
297      * @tc.steps: step1. Create Video
298      * @tc.expected: step1. Create Video successfully
299      */
300     auto frameNode = CreateVideoNode(g_testProperty);
301     EXPECT_EQ(frameNode->GetTag(), V2::VIDEO_ETS_TAG);
302     auto pattern2 = frameNode->GetPattern<VideoPattern>();
303 
304     /**
305      * @tc.steps: step2. Prepare the childNode & videoEvent
306      */
307     auto controlBar = frameNode->GetChildAtIndex(2);
308     auto playBtn = AceType::DynamicCast<FrameNode>(controlBar->GetChildAtIndex(0));
309     auto playBtnGestureEventHub = playBtn->GetOrCreateGestureEventHub();
310 
311     // set videoEvent
312     auto videoEventHub2 = frameNode->GetEventHub<VideoEventHub>();
313     ASSERT_TRUE(videoEventHub2);
314     std::string startCheck;
__anon130987530602(const std::string& ) 315     VideoEventCallback onStart = [&startCheck](const std::string& /* param */) { startCheck = VIDEO_START_EVENT; };
316     std::string pauseCheck;
__anon130987530702(const std::string& ) 317     VideoEventCallback onPause = [&pauseCheck](const std::string& /* param */) { pauseCheck = VIDEO_PAUSE_EVENT; };
318     std::string finishCheck;
__anon130987530802(const std::string& ) 319     VideoEventCallback onFinish = [&finishCheck](const std::string& /* param */) { finishCheck = VIDEO_FINISH_EVENT; };
320     std::string stopCheck;
__anon130987530902(const std::string& ) 321     VideoEventCallback onStop = [&stopCheck](const std::string& /* param */) { stopCheck = VIDEO_STOP_EVENT; };
322     videoEventHub2->SetOnStart(std::move(onStart));
323     videoEventHub2->SetOnPause(std::move(onPause));
324     videoEventHub2->SetOnFinish(std::move(onFinish));
325     videoEventHub2->SetOnStop(std::move(onStop));
326 
327     /**
328      * @tc.steps: step3. Call OnPlayerStatus status == STARTED
329      * @tc.expected: step3. FireStartEvent has called and playBtn event will call pattern2->Pause()
330      */
331     pattern2->OnPlayerStatus(PlaybackStatus::STARTED);
332     EXPECT_EQ(startCheck, VIDEO_START_EVENT);
333     // will call pattern2->Pause()
334     EXPECT_TRUE(pattern2->isPlaying_);
335     // case1: MediaPlayer is invalid
336     auto flag = playBtnGestureEventHub->ActClick();
337     EXPECT_TRUE(flag);
338 
339     /**
340      * @tc.steps: step4. Call OnPlayerStatus status == PREPARED
341      * @tc.expected: step4. FirePauseEvent & mediaPlayer->GetDuration() has called
342      */
343     // case1: MediaPlayer is valid
344     pauseCheck.clear();
345     pattern2->OnPlayerStatus(PlaybackStatus::PAUSED);
346     EXPECT_EQ(pauseCheck, VIDEO_PAUSE_EVENT);
347 
348     /**
349      * @tc.steps: step5. Call OnPlayerStatus status == PLAYBACK_COMPLETE
350      * @tc.expected: step5. FireFinishEvent & OnUpdateTime(pos = CURRENT_POS) will be called
351      */
352     pattern2->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case1: controls = true
353     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
354     auto videoLayoutProperty = pattern2->GetLayoutProperty<VideoLayoutProperty>();
355     videoLayoutProperty->UpdateControls(false);
356     pattern2->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case2: controls = false
357     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
358     pattern2->OnPlayerStatus(PlaybackStatus::ERROR);
359     pattern2->OnPlayerStatus(PlaybackStatus::IDLE);
360     pattern2->OnPlayerStatus(PlaybackStatus::PREPARED);
361     pattern2->OnPlayerStatus(PlaybackStatus::PAUSED);
362     pattern2->OnPlayerStatus(PlaybackStatus::STOPPED);
363     EXPECT_EQ(stopCheck, VIDEO_STOP_EVENT);
364     pattern2->OnPlayerStatus(PlaybackStatus::NONE);
365 }
366 
367 /**
368  * @tc.name: VideoPropertyTest003
369  * @tc.desc: Create Vdeo, and set its properties.
370  * @tc.type: FUNC
371  */
372 HWTEST_F(VideoTestAddNg, OnPlayerStatusTest003, TestSize.Level1)
373 {
374     auto themeManager3 = AceType::MakeRefPtr<MockThemeManager>();
375     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager3);
376     EXPECT_CALL(*themeManager3, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<VideoTheme>()));
377     /**
378      * @tc.steps: step1. Create Video
379      * @tc.expected: step1. Create Video successfully
380      */
381     auto frameNode = CreateVideoNode(g_testProperty);
382     EXPECT_EQ(frameNode->GetTag(), V2::VIDEO_ETS_TAG);
383     auto pattern3 = frameNode->GetPattern<VideoPattern>();
384 
385     /**
386      * @tc.steps: step2. Prepare the childNode & videoEvent
387      */
388     auto controlBar = frameNode->GetChildAtIndex(2);
389     auto playBtn = AceType::DynamicCast<FrameNode>(controlBar->GetChildAtIndex(0));
390     auto playBtnGestureEventHub = playBtn->GetOrCreateGestureEventHub();
391 
392     // set videoEvent
393     auto videoEventHub3 = frameNode->GetEventHub<VideoEventHub>();
394     std::string startCheck;
__anon130987530a02(const std::string& ) 395     VideoEventCallback onStart = [&startCheck](const std::string& /* param */) { startCheck = VIDEO_START_EVENT; };
396     std::string pauseCheck;
__anon130987530b02(const std::string& ) 397     VideoEventCallback onPause = [&pauseCheck](const std::string& /* param */) { pauseCheck = VIDEO_PAUSE_EVENT; };
398     std::string finishCheck;
__anon130987530c02(const std::string& ) 399     VideoEventCallback onFinish = [&finishCheck](const std::string& /* param */) { finishCheck = VIDEO_FINISH_EVENT; };
400     std::string stopCheck;
__anon130987530d02(const std::string& ) 401     VideoEventCallback onStop = [&stopCheck](const std::string& /* param */) { stopCheck = VIDEO_STOP_EVENT; };
402     videoEventHub3->SetOnStart(std::move(onStart));
403     videoEventHub3->SetOnPause(std::move(onPause));
404     videoEventHub3->SetOnFinish(std::move(onFinish));
405     videoEventHub3->SetOnStop(std::move(onStop));
406 
407     /**
408      * @tc.steps: step3. Call OnPlayerStatus status == STARTED
409      * @tc.expected: step3. FireStartEvent has called and playBtn event will call pattern3->Pause()
410      */
411     pattern3->OnPlayerStatus(PlaybackStatus::STARTED);
412     EXPECT_EQ(startCheck, VIDEO_START_EVENT);
413     // will call pattern3->Pause()
414     EXPECT_TRUE(pattern3->isPlaying_);
415     // case1: MediaPlayer is valid & isPlaying = true
416     EXPECT_CALL(*(AceType::DynamicCast<MockMediaPlayer>(pattern3->mediaPlayer_)),
417                   Pause()).Times(1).WillOnce(Return(0));
418     auto flag = playBtnGestureEventHub->ActClick();
419     EXPECT_TRUE(flag);
420 
421     /**
422      * @tc.steps: step4. Call OnPlayerStatus status == PREPARED
423      * @tc.expected: step4. FirePauseEvent & mediaPlayer->GetDuration() has called
424      */
425     // case1: MediaPlayer is invalid
426     pattern3->OnPlayerStatus(PlaybackStatus::PAUSED);
427     EXPECT_EQ(pauseCheck, VIDEO_PAUSE_EVENT);
428 
429     /**
430      * @tc.steps: step5. Call OnPlayerStatus status == PLAYBACK_COMPLETE
431      * @tc.expected: step5. FireFinishEvent & OnUpdateTime(pos = CURRENT_POS) will be called
432      */
433     pattern3->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case1: controls = true
434     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
435     auto videoLayoutProperty = pattern3->GetLayoutProperty<VideoLayoutProperty>();
436     videoLayoutProperty->UpdateControls(false);
437     pattern3->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case2: controls = false
438     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
439     pattern3->OnPlayerStatus(PlaybackStatus::ERROR);
440     pattern3->OnPlayerStatus(PlaybackStatus::IDLE);
441     pattern3->OnPlayerStatus(PlaybackStatus::PREPARED);
442     pattern3->OnPlayerStatus(PlaybackStatus::PAUSED);
443     pattern3->OnPlayerStatus(PlaybackStatus::STOPPED);
444     EXPECT_EQ(stopCheck, VIDEO_STOP_EVENT);
445     pattern3->OnPlayerStatus(PlaybackStatus::NONE);
446 }
447 
448 /**
449  * @tc.name: VideoPropertyTest004
450  * @tc.desc: Create Vdeo, and set its properties.
451  * @tc.type: FUNC
452  */
453 HWTEST_F(VideoTestAddNg, OnPlayerStatusTest004, TestSize.Level1)
454 {
455     auto themeManager4 = AceType::MakeRefPtr<MockThemeManager>();
456     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager4);
457     EXPECT_CALL(*themeManager4, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<VideoTheme>()));
458     /**
459      * @tc.steps: step1. Create Video
460      * @tc.expected: step1. Create Video successfully
461      */
462     auto frameNode = CreateVideoNode(g_testProperty);
463     EXPECT_EQ(frameNode->GetTag(), V2::VIDEO_ETS_TAG);
464     auto pattern4 = frameNode->GetPattern<VideoPattern>();
465 
466     /**
467      * @tc.steps: step2. Prepare the childNode & videoEvent
468      */
469     auto controlBar = frameNode->GetChildAtIndex(2);
470     auto playBtn = AceType::DynamicCast<FrameNode>(controlBar->GetChildAtIndex(0));
471     auto playBtnGestureEventHub = playBtn->GetOrCreateGestureEventHub();
472 
473     // set videoEvent
474     auto videoEventHub4 = frameNode->GetEventHub<VideoEventHub>();
475     std::string startCheck;
__anon130987530e02(const std::string& ) 476     VideoEventCallback onStart = [&startCheck](const std::string& /* param */) { startCheck = VIDEO_START_EVENT; };
477     std::string pauseCheck;
__anon130987530f02(const std::string& ) 478     VideoEventCallback onPause = [&pauseCheck](const std::string& /* param */) { pauseCheck = VIDEO_PAUSE_EVENT; };
479     std::string finishCheck;
__anon130987531002(const std::string& ) 480     VideoEventCallback onFinish = [&finishCheck](const std::string& /* param */) { finishCheck = VIDEO_FINISH_EVENT; };
481     std::string stopCheck;
__anon130987531102(const std::string& ) 482     VideoEventCallback onStop = [&stopCheck](const std::string& /* param */) { stopCheck = VIDEO_STOP_EVENT; };
483     videoEventHub4->SetOnStart(std::move(onStart));
484     videoEventHub4->SetOnPause(std::move(onPause));
485     videoEventHub4->SetOnFinish(std::move(onFinish));
486     videoEventHub4->SetOnStop(std::move(onStop));
487 
488     /**
489      * @tc.steps: step3. Call OnPlayerStatus status == STARTED
490      * @tc.expected: step3. FireStartEvent has called and playBtn event will call pattern4->Pause()
491      */
492     pattern4->OnPlayerStatus(PlaybackStatus::STARTED);
493     EXPECT_EQ(startCheck, VIDEO_START_EVENT);
494     // will call pattern4->Pause()
495     EXPECT_TRUE(pattern4->isPlaying_);
496     // case1: MediaPlayer is valid & isPlaying = true
497     EXPECT_CALL(*(AceType::DynamicCast<MockMediaPlayer>(pattern4->mediaPlayer_)),
498                   Pause()).Times(1).WillOnce(Return(0));
499     auto flag = playBtnGestureEventHub->ActClick();
500     EXPECT_TRUE(flag);
501 
502     /**
503      * @tc.steps: step4. Call OnPlayerStatus status == PREPARED
504      * @tc.expected: step4. FirePauseEvent & mediaPlayer->GetDuration() has called
505      */
506     // case1: MediaPlayer is valid
507     pauseCheck.clear();
508     pattern4->OnPlayerStatus(PlaybackStatus::PAUSED);
509     EXPECT_EQ(pauseCheck, VIDEO_PAUSE_EVENT);
510 
511     /**
512      * @tc.steps: step5. Call OnPlayerStatus status == PLAYBACK_COMPLETE
513      * @tc.expected: step5. FireFinishEvent & OnUpdateTime(pos = CURRENT_POS) will be called
514      */
515     pattern4->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case1: controls = true
516     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
517     auto videoLayoutProperty = pattern4->GetLayoutProperty<VideoLayoutProperty>();
518     videoLayoutProperty->UpdateControls(false);
519     pattern4->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case2: controls = false
520     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
521     pattern4->OnPlayerStatus(PlaybackStatus::ERROR);
522     pattern4->OnPlayerStatus(PlaybackStatus::IDLE);
523     pattern4->OnPlayerStatus(PlaybackStatus::PREPARED);
524     pattern4->OnPlayerStatus(PlaybackStatus::PAUSED);
525     pattern4->OnPlayerStatus(PlaybackStatus::STOPPED);
526     EXPECT_EQ(stopCheck, VIDEO_STOP_EVENT);
527     pattern4->OnPlayerStatus(PlaybackStatus::NONE);
528 }
529 
530 /**
531  * @tc.name: VideoPropertyTest005
532  * @tc.desc: Create Vdeo, and set its properties.
533  * @tc.type: FUNC
534  */
535 HWTEST_F(VideoTestAddNg, OnPlayerStatusTest005, TestSize.Level1)
536 {
537     auto themeManager5 = AceType::MakeRefPtr<MockThemeManager>();
538     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager5);
539     EXPECT_CALL(*themeManager5, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<VideoTheme>()));
540     /**
541      * @tc.steps: step1. Create Video
542      * @tc.expected: step1. Create Video successfully
543      */
544     auto frameNode = CreateVideoNode(g_testProperty);
545     EXPECT_EQ(frameNode->GetTag(), V2::VIDEO_ETS_TAG);
546     auto pattern5 = frameNode->GetPattern<VideoPattern>();
547 
548     /**
549      * @tc.steps: step2. Prepare the childNode & videoEvent
550      */
551     auto controlBar = frameNode->GetChildAtIndex(2);
552     auto playBtn = AceType::DynamicCast<FrameNode>(controlBar->GetChildAtIndex(0));
553     auto playBtnGestureEventHub = playBtn->GetOrCreateGestureEventHub();
554 
555     // set videoEvent
556     auto videoEventHub5 = frameNode->GetEventHub<VideoEventHub>();
557     ASSERT_TRUE(videoEventHub5);
558     std::string startCheck;
__anon130987531202(const std::string& ) 559     VideoEventCallback onStart = [&startCheck](const std::string& /* param */) { startCheck = VIDEO_START_EVENT; };
560     std::string pauseCheck;
__anon130987531302(const std::string& ) 561     VideoEventCallback onPause = [&pauseCheck](const std::string& /* param */) { pauseCheck = VIDEO_PAUSE_EVENT; };
562     std::string finishCheck;
__anon130987531402(const std::string& ) 563     VideoEventCallback onFinish = [&finishCheck](const std::string& /* param */) { finishCheck = VIDEO_FINISH_EVENT; };
564     std::string stopCheck;
__anon130987531502(const std::string& ) 565     VideoEventCallback onStop = [&stopCheck](const std::string& /* param */) { stopCheck = VIDEO_STOP_EVENT; };
566     videoEventHub5->SetOnStart(std::move(onStart));
567     videoEventHub5->SetOnPause(std::move(onPause));
568     videoEventHub5->SetOnFinish(std::move(onFinish));
569     videoEventHub5->SetOnStop(std::move(onStop));
570 
571     /**
572      * @tc.steps: step3. Call OnPlayerStatus status == STARTED
573      * @tc.expected: step3. FireStartEvent has called and playBtn event will call pattern5->Pause()
574      */
575     pattern5->OnPlayerStatus(PlaybackStatus::STARTED);
576     EXPECT_EQ(startCheck, VIDEO_START_EVENT);
577     // will call pattern5->Pause()
578     EXPECT_TRUE(pattern5->isPlaying_);
579 
580     // case1: MediaPlayer is valid & isPlaying = false
581     pattern5->isPlaying_ = false;
582     auto flag = playBtnGestureEventHub->ActClick();
583     EXPECT_TRUE(flag);
584 
585     /**
586      * @tc.steps: step4. Call OnPlayerStatus status == PREPARED
587      * @tc.expected: step4. FirePauseEvent & mediaPlayer->GetDuration() has called
588      */
589     // case1: MediaPlayer is invalid
590     pattern5->OnPlayerStatus(PlaybackStatus::PAUSED);
591     EXPECT_EQ(pauseCheck, VIDEO_PAUSE_EVENT);
592 
593     /**
594      * @tc.steps: step5. Call OnPlayerStatus status == PLAYBACK_COMPLETE
595      * @tc.expected: step5. FireFinishEvent & OnUpdateTime(pos = CURRENT_POS) will be called
596      */
597     pattern5->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case1: controls = true
598     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
599     auto videoLayoutProperty = pattern5->GetLayoutProperty<VideoLayoutProperty>();
600     videoLayoutProperty->UpdateControls(false);
601     pattern5->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case2: controls = false
602     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
603     pattern5->OnPlayerStatus(PlaybackStatus::ERROR);
604     pattern5->OnPlayerStatus(PlaybackStatus::IDLE);
605     pattern5->OnPlayerStatus(PlaybackStatus::PREPARED);
606     pattern5->OnPlayerStatus(PlaybackStatus::PAUSED);
607     pattern5->OnPlayerStatus(PlaybackStatus::STOPPED);
608     EXPECT_EQ(stopCheck, VIDEO_STOP_EVENT);
609     pattern5->OnPlayerStatus(PlaybackStatus::NONE);
610 }
611 
612 /**
613  * @tc.name: VideoPropertyTest006
614  * @tc.desc: Create Vdeo, and set its properties.
615  * @tc.type: FUNC
616  */
617 HWTEST_F(VideoTestAddNg, OnPlayerStatusTest006, TestSize.Level1)
618 {
619     auto themeManager6 = AceType::MakeRefPtr<MockThemeManager>();
620     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager6);
621     EXPECT_CALL(*themeManager6, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<VideoTheme>()));
622 
623     /**
624      * @tc.steps: step1. Create Video
625      * @tc.expected: step1. Create Video successfully
626      */
627     auto frameNode = CreateVideoNode(g_testProperty);
628     EXPECT_EQ(frameNode->GetTag(), V2::VIDEO_ETS_TAG);
629     auto pattern6 = frameNode->GetPattern<VideoPattern>();
630 
631     /**
632      * @tc.steps: step2. Prepare the childNode & videoEvent
633      */
634     auto controlBar = frameNode->GetChildAtIndex(2);
635     auto playBtn = AceType::DynamicCast<FrameNode>(controlBar->GetChildAtIndex(0));
636     auto playBtnGestureEventHub = playBtn->GetOrCreateGestureEventHub();
637 
638     // set videoEvent
639     auto videoEventHub6 = frameNode->GetEventHub<VideoEventHub>();
640     ASSERT_TRUE(videoEventHub6);
641     std::string startCheck;
__anon130987531602(const std::string& ) 642     VideoEventCallback onStart = [&startCheck](const std::string& /* param */) { startCheck = VIDEO_START_EVENT; };
643     std::string pauseCheck;
__anon130987531702(const std::string& ) 644     VideoEventCallback onPause = [&pauseCheck](const std::string& /* param */) { pauseCheck = VIDEO_PAUSE_EVENT; };
645     std::string finishCheck;
__anon130987531802(const std::string& ) 646     VideoEventCallback onFinish = [&finishCheck](const std::string& /* param */) { finishCheck = VIDEO_FINISH_EVENT; };
647     std::string stopCheck;
__anon130987531902(const std::string& ) 648     VideoEventCallback onStop = [&stopCheck](const std::string& /* param */) { stopCheck = VIDEO_STOP_EVENT; };
649     videoEventHub6->SetOnStart(std::move(onStart));
650     videoEventHub6->SetOnPause(std::move(onPause));
651     videoEventHub6->SetOnFinish(std::move(onFinish));
652     videoEventHub6->SetOnStop(std::move(onStop));
653 
654     /**
655      * @tc.steps: step3. Call OnPlayerStatus status == STARTED
656      * @tc.expected: step3. FireStartEvent has called and playBtn event will call pattern6->Pause()
657      */
658     pattern6->OnPlayerStatus(PlaybackStatus::STARTED);
659     EXPECT_EQ(startCheck, VIDEO_START_EVENT);
660     // will call pattern6->Pause()
661     EXPECT_TRUE(pattern6->isPlaying_);
662 
663     // case1: MediaPlayer is valid & isPlaying = false
664     pattern6->isPlaying_ = false;
665     auto flag = playBtnGestureEventHub->ActClick();
666     EXPECT_TRUE(flag);
667 
668     /**
669      * @tc.steps: step4. Call OnPlayerStatus status == PREPARED
670      * @tc.expected: step4. FirePauseEvent & mediaPlayer->GetDuration() has called
671      */
672     // case1: MediaPlayer is valid
673     pauseCheck.clear();
674     pattern6->OnPlayerStatus(PlaybackStatus::PAUSED);
675     EXPECT_EQ(pauseCheck, VIDEO_PAUSE_EVENT);
676 
677     /**
678      * @tc.steps: step5. Call OnPlayerStatus status == PLAYBACK_COMPLETE
679      * @tc.expected: step5. FireFinishEvent & OnUpdateTime(pos = CURRENT_POS) will be called
680      */
681     pattern6->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case1: controls = true
682     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
683     auto videoLayoutProperty = pattern6->GetLayoutProperty<VideoLayoutProperty>();
684     videoLayoutProperty->UpdateControls(false);
685     pattern6->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case2: controls = false
686     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
687     pattern6->OnPlayerStatus(PlaybackStatus::ERROR);
688     pattern6->OnPlayerStatus(PlaybackStatus::IDLE);
689     pattern6->OnPlayerStatus(PlaybackStatus::PREPARED);
690     pattern6->OnPlayerStatus(PlaybackStatus::PAUSED);
691     pattern6->OnPlayerStatus(PlaybackStatus::STOPPED);
692     EXPECT_EQ(stopCheck, VIDEO_STOP_EVENT);
693     pattern6->OnPlayerStatus(PlaybackStatus::NONE);
694 }
695 
696 /**
697  * @tc.name: VideoPropertyTest007
698  * @tc.desc: Create Vdeo, and set its properties.
699  * @tc.type: FUNC
700  */
701 HWTEST_F(VideoTestAddNg, OnPlayerStatusTest007, TestSize.Level1)
702 {
703     auto themeManager7 = AceType::MakeRefPtr<MockThemeManager>();
704     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager7);
705     EXPECT_CALL(*themeManager7, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<VideoTheme>()));
706     /**
707      * @tc.steps: step1. Create Video
708      * @tc.expected: step1. Create Video successfully
709      */
710     auto frameNode = CreateVideoNode(g_testProperty);
711     EXPECT_EQ(frameNode->GetTag(), V2::VIDEO_ETS_TAG);
712     auto pattern7 = frameNode->GetPattern<VideoPattern>();
713 
714     /**
715      * @tc.steps: step2. Prepare the childNode & videoEvent
716      */
717     auto controlBar = frameNode->GetChildAtIndex(2);
718     auto playBtn = AceType::DynamicCast<FrameNode>(controlBar->GetChildAtIndex(0));
719     ASSERT_TRUE(playBtn);
720     auto playBtnGestureEventHub = playBtn->GetOrCreateGestureEventHub();
721     ASSERT_TRUE(playBtnGestureEventHub);
722 
723     // set videoEvent
724     auto videoEventHub7 = frameNode->GetEventHub<VideoEventHub>();
725     ASSERT_TRUE(videoEventHub7);
726     std::string startCheck;
__anon130987531a02(const std::string& ) 727     VideoEventCallback onStart = [&startCheck](const std::string& /* param */) { startCheck = VIDEO_START_EVENT; };
728     std::string pauseCheck;
__anon130987531b02(const std::string& ) 729     VideoEventCallback onPause = [&pauseCheck](const std::string& /* param */) { pauseCheck = VIDEO_PAUSE_EVENT; };
730     std::string finishCheck;
__anon130987531c02(const std::string& ) 731     VideoEventCallback onFinish = [&finishCheck](const std::string& /* param */) { finishCheck = VIDEO_FINISH_EVENT; };
732     std::string stopCheck;
__anon130987531d02(const std::string& ) 733     VideoEventCallback onStop = [&stopCheck](const std::string& /* param */) { stopCheck = VIDEO_STOP_EVENT; };
734     videoEventHub7->SetOnStart(std::move(onStart));
735     videoEventHub7->SetOnPause(std::move(onPause));
736     videoEventHub7->SetOnFinish(std::move(onFinish));
737     videoEventHub7->SetOnStop(std::move(onStop));
738 
739     /**
740      * @tc.steps: step3. Call OnPlayerStatus status == STARTED
741      * @tc.expected: step3. FireStartEvent has called and playBtn event will call pattern7->Pause()
742      */
743     pattern7->OnPlayerStatus(PlaybackStatus::STARTED);
744     EXPECT_EQ(startCheck, VIDEO_START_EVENT);
745     // will call pattern7->Pause()
746     EXPECT_TRUE(pattern7->isPlaying_);
747     // case1: MediaPlayer is invalid
748     auto flag = playBtnGestureEventHub->ActClick();
749     EXPECT_TRUE(flag);
750     // case2: MediaPlayer is valid & isPlaying = true
751     EXPECT_CALL(*(AceType::DynamicCast<MockMediaPlayer>(pattern7->mediaPlayer_)),
752                   Pause()).Times(2).WillOnce(Return(0));
753     flag = playBtnGestureEventHub->ActClick();
754     EXPECT_TRUE(flag);
755     // case3: MediaPlayer is valid & isPlaying = false
756     pattern7->isPlaying_ = false;
757     flag = playBtnGestureEventHub->ActClick();
758     EXPECT_TRUE(flag);
759 
760     /**
761      * @tc.steps: step4. Call OnPlayerStatus status == PREPARED
762      * @tc.expected: step4. FirePauseEvent & mediaPlayer->GetDuration() has called
763      */
764     // case1: MediaPlayer is invalid
765     pattern7->OnPlayerStatus(PlaybackStatus::PAUSED);
766     EXPECT_EQ(pauseCheck, VIDEO_PAUSE_EVENT);
767 
768     // case1: MediaPlayer is valid
769     pauseCheck.clear();
770     pattern7->OnPlayerStatus(PlaybackStatus::PAUSED);
771     EXPECT_EQ(pauseCheck, VIDEO_PAUSE_EVENT);
772 
773     /**
774      * @tc.steps: step5. Call OnPlayerStatus status == PLAYBACK_COMPLETE
775      * @tc.expected: step5. FireFinishEvent & OnUpdateTime(pos = CURRENT_POS) will be called
776      */
777     pattern7->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case1: controls = true
778     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
779     auto videoLayoutProperty = pattern7->GetLayoutProperty<VideoLayoutProperty>();
780     videoLayoutProperty->UpdateControls(false);
781 }
782 
783 /**
784  * @tc.name: VideoPropertyTest008
785  * @tc.desc: Create Vdeo, and set its properties.
786  * @tc.type: FUNC
787  */
788 HWTEST_F(VideoTestAddNg, OnPlayerStatusTest008, TestSize.Level1)
789 {
790     auto themeManager8 = AceType::MakeRefPtr<MockThemeManager>();
791     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager8);
792     EXPECT_CALL(*themeManager8, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<VideoTheme>()));
793     /**
794      * @tc.steps: step1. Create Video
795      * @tc.expected: step1. Create Video successfully
796      */
797     auto frameNode = CreateVideoNode(g_testProperty);
798     EXPECT_EQ(frameNode->GetTag(), V2::VIDEO_ETS_TAG);
799     auto pattern8 = frameNode->GetPattern<VideoPattern>();
800 
801     /**
802      * @tc.steps: step2. Prepare the childNode & videoEvent
803      */
804     auto controlBar = frameNode->GetChildAtIndex(2);
805     auto playBtn = AceType::DynamicCast<FrameNode>(controlBar->GetChildAtIndex(0));
806     auto playBtnGestureEventHub = playBtn->GetOrCreateGestureEventHub();
807 
808     // set videoEvent
809     auto videoEventHub8 = frameNode->GetEventHub<VideoEventHub>();
810     std::string startCheck;
__anon130987531e02(const std::string& ) 811     VideoEventCallback onStart = [&startCheck](const std::string& /* param */) { startCheck = VIDEO_START_EVENT; };
812     std::string pauseCheck;
__anon130987531f02(const std::string& ) 813     VideoEventCallback onPause = [&pauseCheck](const std::string& /* param */) { pauseCheck = VIDEO_PAUSE_EVENT; };
814     std::string finishCheck;
__anon130987532002(const std::string& ) 815     VideoEventCallback onFinish = [&finishCheck](const std::string& /* param */) { finishCheck = VIDEO_FINISH_EVENT; };
816     std::string stopCheck;
__anon130987532102(const std::string& ) 817     VideoEventCallback onStop = [&stopCheck](const std::string& /* param */) { stopCheck = VIDEO_STOP_EVENT; };
818     videoEventHub8->SetOnStart(std::move(onStart));
819     videoEventHub8->SetOnPause(std::move(onPause));
820     videoEventHub8->SetOnFinish(std::move(onFinish));
821     videoEventHub8->SetOnStop(std::move(onStop));
822 
823     /**
824      * @tc.steps: step3. Call OnPlayerStatus status == STARTED
825      * @tc.expected: step3. FireStartEvent has called and playBtn event will call pattern8->Pause()
826      */
827     pattern8->OnPlayerStatus(PlaybackStatus::STARTED);
828     EXPECT_EQ(startCheck, VIDEO_START_EVENT);
829     // will call pattern8->Pause()
830     EXPECT_TRUE(pattern8->isPlaying_);
831     // case1: MediaPlayer is invalid
832     auto flag = playBtnGestureEventHub->ActClick();
833     EXPECT_TRUE(flag);
834     // case2: MediaPlayer is valid & isPlaying = true
835     EXPECT_CALL(*(AceType::DynamicCast<MockMediaPlayer>(pattern8->mediaPlayer_)),
836                   Pause()).Times(1).WillOnce(Return(0));
837     // case3: MediaPlayer is valid & isPlaying = false
838     pattern8->isPlaying_ = false;
839     flag = playBtnGestureEventHub->ActClick();
840     EXPECT_TRUE(flag);
841 
842     /**
843      * @tc.steps: step4. Call OnPlayerStatus status == PREPARED
844      * @tc.expected: step4. FirePauseEvent & mediaPlayer->GetDuration() has called
845      */
846     // case1: MediaPlayer is invalid
847     pattern8->OnPlayerStatus(PlaybackStatus::PAUSED);
848     EXPECT_EQ(pauseCheck, VIDEO_PAUSE_EVENT);
849 
850     // case1: MediaPlayer is valid
851     pauseCheck.clear();
852     pattern8->OnPlayerStatus(PlaybackStatus::PAUSED);
853     EXPECT_EQ(pauseCheck, VIDEO_PAUSE_EVENT);
854 
855     /**
856      * @tc.steps: step5. Call OnPlayerStatus status == PLAYBACK_COMPLETE
857      * @tc.expected: step5. FireFinishEvent & OnUpdateTime(pos = CURRENT_POS) will be called
858      */
859     auto videoLayoutProperty = pattern8->GetLayoutProperty<VideoLayoutProperty>();
860     videoLayoutProperty->UpdateControls(false);
861     pattern8->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case2: controls = false
862     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
863     pattern8->OnPlayerStatus(PlaybackStatus::ERROR);
864     pattern8->OnPlayerStatus(PlaybackStatus::IDLE);
865     pattern8->OnPlayerStatus(PlaybackStatus::PREPARED);
866     pattern8->OnPlayerStatus(PlaybackStatus::PAUSED);
867     pattern8->OnPlayerStatus(PlaybackStatus::STOPPED);
868     EXPECT_EQ(stopCheck, VIDEO_STOP_EVENT);
869     pattern8->OnPlayerStatus(PlaybackStatus::NONE);
870 }
871 
872 /**
873  * @tc.name: VideoPropertyTest009
874  * @tc.desc: Create Vdeo, and set its properties.
875  * @tc.type: FUNC
876  */
877 HWTEST_F(VideoTestAddNg, OnPlayerStatusTest009, TestSize.Level1)
878 {
879     auto themeManager9 = AceType::MakeRefPtr<MockThemeManager>();
880     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager9);
881     EXPECT_CALL(*themeManager9, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<VideoTheme>()));
882     /**
883      * @tc.steps: step1. Create Video
884      * @tc.expected: step1. Create Video successfully
885      */
886     auto frameNode = CreateVideoNode(g_testProperty);
887     EXPECT_EQ(frameNode->GetTag(), V2::VIDEO_ETS_TAG);
888     auto pattern9 = frameNode->GetPattern<VideoPattern>();
889 
890     /**
891      * @tc.steps: step2. Prepare the childNode & videoEvent
892      */
893     auto controlBar = frameNode->GetChildAtIndex(2);
894     auto playBtn = AceType::DynamicCast<FrameNode>(controlBar->GetChildAtIndex(0));
895     auto playBtnGestureEventHub = playBtn->GetOrCreateGestureEventHub();
896 
897     // set videoEvent
898     auto videoEventHub9 = frameNode->GetEventHub<VideoEventHub>();
899     std::string startCheck;
__anon130987532202(const std::string& ) 900     VideoEventCallback onStart = [&startCheck](const std::string& /* param */) { startCheck = VIDEO_START_EVENT; };
901     std::string pauseCheck;
__anon130987532302(const std::string& ) 902     VideoEventCallback onPause = [&pauseCheck](const std::string& /* param */) { pauseCheck = VIDEO_PAUSE_EVENT; };
903     std::string finishCheck;
__anon130987532402(const std::string& ) 904     VideoEventCallback onFinish = [&finishCheck](const std::string& /* param */) { finishCheck = VIDEO_FINISH_EVENT; };
905     std::string stopCheck;
__anon130987532502(const std::string& ) 906     VideoEventCallback onStop = [&stopCheck](const std::string& /* param */) { stopCheck = VIDEO_STOP_EVENT; };
907     videoEventHub9->SetOnStart(std::move(onStart));
908     videoEventHub9->SetOnPause(std::move(onPause));
909     videoEventHub9->SetOnFinish(std::move(onFinish));
910     videoEventHub9->SetOnStop(std::move(onStop));
911 
912     /**
913      * @tc.steps: step3. Call OnPlayerStatus status == STARTED
914      * @tc.expected: step3. FireStartEvent has called and playBtn event will call pattern9->Pause()
915      */
916     pattern9->OnPlayerStatus(PlaybackStatus::STARTED);
917     EXPECT_EQ(startCheck, VIDEO_START_EVENT);
918     // will call pattern9->Pause()
919     EXPECT_TRUE(pattern9->isPlaying_);
920     // case1: MediaPlayer is invalid
921     auto flag = playBtnGestureEventHub->ActClick();
922     EXPECT_TRUE(flag);
923 
924     /**
925      * @tc.steps: step4. Call OnPlayerStatus status == PREPARED
926      * @tc.expected: step4. FirePauseEvent & mediaPlayer->GetDuration() has called
927      */
928     // case1: MediaPlayer is invalid
929     pattern9->OnPlayerStatus(PlaybackStatus::PAUSED);
930     EXPECT_EQ(pauseCheck, VIDEO_PAUSE_EVENT);
931 
932     /**
933      * @tc.steps: step5. Call OnPlayerStatus status == PLAYBACK_COMPLETE
934      * @tc.expected: step5. FireFinishEvent & OnUpdateTime(pos = CURRENT_POS) will be called
935      */
936     pattern9->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case1: controls = true
937     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
938     auto videoLayoutProperty = pattern9->GetLayoutProperty<VideoLayoutProperty>();
939     videoLayoutProperty->UpdateControls(false);
940 }
941 
942 /**
943  * @tc.name: VideoPropertyTest010
944  * @tc.desc: Create Vdeo, and set its properties.
945  * @tc.type: FUNC
946  */
947 HWTEST_F(VideoTestAddNg, OnPlayerStatusTest010, TestSize.Level1)
948 {
949     auto themeManager10 = AceType::MakeRefPtr<MockThemeManager>();
950     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager10);
951     EXPECT_CALL(*themeManager10, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<VideoTheme>()));
952     /**
953      * @tc.steps: step1. Create Video
954      * @tc.expected: step1. Create Video successfully
955      */
956     auto frameNode = CreateVideoNode(g_testProperty);
957     ASSERT_TRUE(frameNode);
958     EXPECT_EQ(frameNode->GetTag(), V2::VIDEO_ETS_TAG);
959     auto pattern10 = frameNode->GetPattern<VideoPattern>();
960     ASSERT_TRUE(pattern10);
961 
962     /**
963      * @tc.steps: step2. Prepare the childNode & videoEvent
964      */
965     auto controlBar = frameNode->GetChildAtIndex(2);
966     ASSERT_TRUE(controlBar);
967 
968     auto playBtn = AceType::DynamicCast<FrameNode>(controlBar->GetChildAtIndex(0));
969     ASSERT_TRUE(playBtn);
970     auto playBtnGestureEventHub = playBtn->GetOrCreateGestureEventHub();
971     ASSERT_TRUE(playBtnGestureEventHub);
972 
973     // set videoEvent
974     auto videoEventHub10 = frameNode->GetEventHub<VideoEventHub>();
975     ASSERT_TRUE(videoEventHub10);
976     std::string startCheck;
__anon130987532602(const std::string& ) 977     VideoEventCallback onStart = [&startCheck](const std::string& /* param */) { startCheck = VIDEO_START_EVENT; };
978     std::string pauseCheck;
__anon130987532702(const std::string& ) 979     VideoEventCallback onPause = [&pauseCheck](const std::string& /* param */) { pauseCheck = VIDEO_PAUSE_EVENT; };
980     std::string finishCheck;
__anon130987532802(const std::string& ) 981     VideoEventCallback onFinish = [&finishCheck](const std::string& /* param */) { finishCheck = VIDEO_FINISH_EVENT; };
982     std::string stopCheck;
__anon130987532902(const std::string& ) 983     VideoEventCallback onStop = [&stopCheck](const std::string& /* param */) { stopCheck = VIDEO_STOP_EVENT; };
984     videoEventHub10->SetOnStart(std::move(onStart));
985     videoEventHub10->SetOnPause(std::move(onPause));
986     videoEventHub10->SetOnFinish(std::move(onFinish));
987     videoEventHub10->SetOnStop(std::move(onStop));
988 
989     /**
990      * @tc.steps: step3. Call OnPlayerStatus status == STARTED
991      * @tc.expected: step3. FireStartEvent has called and playBtn event will call pattern10->Pause()
992      */
993     pattern10->OnPlayerStatus(PlaybackStatus::STARTED);
994     EXPECT_EQ(startCheck, VIDEO_START_EVENT);
995     // will call pattern10->Pause()
996     EXPECT_TRUE(pattern10->isPlaying_);
997     // case1: MediaPlayer is invalid
998     auto flag = playBtnGestureEventHub->ActClick();
999     EXPECT_TRUE(flag);
1000 
1001     /**
1002      * @tc.steps: step4. Call OnPlayerStatus status == PREPARED
1003      * @tc.expected: step4. FirePauseEvent & mediaPlayer->GetDuration() has called
1004      */
1005     // case1: MediaPlayer is valid
1006     pauseCheck.clear();
1007     pattern10->OnPlayerStatus(PlaybackStatus::PAUSED);
1008     EXPECT_EQ(pauseCheck, VIDEO_PAUSE_EVENT);
1009 
1010     /**
1011      * @tc.steps: step5. Call OnPlayerStatus status == PLAYBACK_COMPLETE
1012      * @tc.expected: step5. FireFinishEvent & OnUpdateTime(pos = CURRENT_POS) will be called
1013      */
1014     pattern10->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case1: controls = true
1015     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
1016     auto videoLayoutProperty = pattern10->GetLayoutProperty<VideoLayoutProperty>();
1017     videoLayoutProperty->UpdateControls(false);
1018 }
1019 
1020 /**
1021  * @tc.name: VideoPropertyTest011
1022  * @tc.desc: Create Vdeo, and set its properties.
1023  * @tc.type: FUNC
1024  */
1025 HWTEST_F(VideoTestAddNg, OnPlayerStatusTest011, TestSize.Level1)
1026 {
1027     auto themeManager11 = AceType::MakeRefPtr<MockThemeManager>();
1028     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager11);
1029     EXPECT_CALL(*themeManager11, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<VideoTheme>()));
1030     /**
1031      * @tc.steps: step1. Create Video
1032      * @tc.expected: step1. Create Video successfully
1033      */
1034     auto frameNode = CreateVideoNode(g_testProperty);
1035     ASSERT_TRUE(frameNode);
1036     EXPECT_EQ(frameNode->GetTag(), V2::VIDEO_ETS_TAG);
1037     auto pattern11 = frameNode->GetPattern<VideoPattern>();
1038     ASSERT_TRUE(pattern11);
1039 
1040     /**
1041      * @tc.steps: step2. Prepare the childNode & videoEvent
1042      */
1043     auto controlBar = frameNode->GetChildAtIndex(2);
1044     ASSERT_TRUE(controlBar);
1045 
1046     auto playBtn = AceType::DynamicCast<FrameNode>(controlBar->GetChildAtIndex(0));
1047     ASSERT_TRUE(playBtn);
1048     auto playBtnGestureEventHub = playBtn->GetOrCreateGestureEventHub();
1049     ASSERT_TRUE(playBtnGestureEventHub);
1050 
1051     // set videoEvent
1052     auto videoEventHub11 = frameNode->GetEventHub<VideoEventHub>();
1053     ASSERT_TRUE(videoEventHub11);
1054     std::string startCheck;
__anon130987532a02(const std::string& ) 1055     VideoEventCallback onStart = [&startCheck](const std::string& /* param */) { startCheck = VIDEO_START_EVENT; };
1056     std::string pauseCheck;
__anon130987532b02(const std::string& ) 1057     VideoEventCallback onPause = [&pauseCheck](const std::string& /* param */) { pauseCheck = VIDEO_PAUSE_EVENT; };
1058     std::string finishCheck;
__anon130987532c02(const std::string& ) 1059     VideoEventCallback onFinish = [&finishCheck](const std::string& /* param */) { finishCheck = VIDEO_FINISH_EVENT; };
1060     std::string stopCheck;
__anon130987532d02(const std::string& ) 1061     VideoEventCallback onStop = [&stopCheck](const std::string& /* param */) { stopCheck = VIDEO_STOP_EVENT; };
1062     videoEventHub11->SetOnStart(std::move(onStart));
1063     videoEventHub11->SetOnPause(std::move(onPause));
1064     videoEventHub11->SetOnFinish(std::move(onFinish));
1065     videoEventHub11->SetOnStop(std::move(onStop));
1066 
1067     /**
1068      * @tc.steps: step3. Call OnPlayerStatus status == STARTED
1069      * @tc.expected: step3. FireStartEvent has called and playBtn event will call pattern11->Pause()
1070      */
1071     pattern11->OnPlayerStatus(PlaybackStatus::STARTED);
1072     EXPECT_EQ(startCheck, VIDEO_START_EVENT);
1073     // will call pattern11->Pause()
1074     EXPECT_TRUE(pattern11->isPlaying_);
1075     // case1: MediaPlayer is invalid
1076     auto flag = playBtnGestureEventHub->ActClick();
1077     EXPECT_TRUE(flag);
1078 
1079     /**
1080      * @tc.steps: step4. Call OnPlayerStatus status == PREPARED
1081      * @tc.expected: step4. FirePauseEvent & mediaPlayer->GetDuration() has called
1082      */
1083     // case1: MediaPlayer is invalid
1084     pattern11->OnPlayerStatus(PlaybackStatus::PAUSED);
1085     EXPECT_EQ(pauseCheck, VIDEO_PAUSE_EVENT);
1086 
1087     /**
1088      * @tc.steps: step5. Call OnPlayerStatus status == PLAYBACK_COMPLETE
1089      * @tc.expected: step5. FireFinishEvent & OnUpdateTime(pos = CURRENT_POS) will be called
1090      */
1091     auto videoLayoutProperty = pattern11->GetLayoutProperty<VideoLayoutProperty>();
1092     videoLayoutProperty->UpdateControls(false);
1093     pattern11->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case1: controls = false
1094     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
1095     pattern11->OnPlayerStatus(PlaybackStatus::ERROR);
1096     pattern11->OnPlayerStatus(PlaybackStatus::IDLE);
1097     pattern11->OnPlayerStatus(PlaybackStatus::PREPARED);
1098     pattern11->OnPlayerStatus(PlaybackStatus::PAUSED);
1099     pattern11->OnPlayerStatus(PlaybackStatus::STOPPED);
1100     EXPECT_EQ(stopCheck, VIDEO_STOP_EVENT);
1101     pattern11->OnPlayerStatus(PlaybackStatus::NONE);
1102 }
1103 
1104 /**
1105  * @tc.name: VideoPropertyTest012
1106  * @tc.desc: Create Vdeo, and set its properties.
1107  * @tc.type: FUNC
1108  */
1109 HWTEST_F(VideoTestAddNg, OnPlayerStatusTest012, TestSize.Level1)
1110 {
1111     auto themeManager12 = AceType::MakeRefPtr<MockThemeManager>();
1112     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager12);
1113     EXPECT_CALL(*themeManager12, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<VideoTheme>()));
1114     /**
1115      * @tc.steps: step1. Create Video
1116      * @tc.expected: step1. Create Video successfully
1117      */
1118     auto frameNode = CreateVideoNode(g_testProperty);
1119     ASSERT_TRUE(frameNode);
1120     EXPECT_EQ(frameNode->GetTag(), V2::VIDEO_ETS_TAG);
1121     auto pattern12 = frameNode->GetPattern<VideoPattern>();
1122     ASSERT_TRUE(pattern12);
1123 
1124     /**
1125      * @tc.steps: step2. Prepare the childNode & videoEvent
1126      */
1127     auto controlBar = frameNode->GetChildAtIndex(2);
1128     ASSERT_TRUE(controlBar);
1129 
1130     auto playBtn = AceType::DynamicCast<FrameNode>(controlBar->GetChildAtIndex(0));
1131     ASSERT_TRUE(playBtn);
1132     auto playBtnGestureEventHub = playBtn->GetOrCreateGestureEventHub();
1133     ASSERT_TRUE(playBtnGestureEventHub);
1134 
1135     // set videoEvent
1136     auto videoEventHub12 = frameNode->GetEventHub<VideoEventHub>();
1137     ASSERT_TRUE(videoEventHub12);
1138     std::string startCheck;
__anon130987532e02(const std::string& ) 1139     VideoEventCallback onStart = [&startCheck](const std::string& /* param */) { startCheck = VIDEO_START_EVENT; };
1140     std::string pauseCheck;
__anon130987532f02(const std::string& ) 1141     VideoEventCallback onPause = [&pauseCheck](const std::string& /* param */) { pauseCheck = VIDEO_PAUSE_EVENT; };
1142     std::string finishCheck;
__anon130987533002(const std::string& ) 1143     VideoEventCallback onFinish = [&finishCheck](const std::string& /* param */) { finishCheck = VIDEO_FINISH_EVENT; };
1144     std::string stopCheck;
__anon130987533102(const std::string& ) 1145     VideoEventCallback onStop = [&stopCheck](const std::string& /* param */) { stopCheck = VIDEO_STOP_EVENT; };
1146     videoEventHub12->SetOnStart(std::move(onStart));
1147     videoEventHub12->SetOnPause(std::move(onPause));
1148     videoEventHub12->SetOnFinish(std::move(onFinish));
1149     videoEventHub12->SetOnStop(std::move(onStop));
1150 
1151     /**
1152      * @tc.steps: step3. Call OnPlayerStatus status == STARTED
1153      * @tc.expected: step3. FireStartEvent has called and playBtn event will call pattern12->Pause()
1154      */
1155     pattern12->OnPlayerStatus(PlaybackStatus::STARTED);
1156     EXPECT_EQ(startCheck, VIDEO_START_EVENT);
1157     // will call pattern12->Pause()
1158     EXPECT_TRUE(pattern12->isPlaying_);
1159     // case1: MediaPlayer is invalid
1160     auto flag = playBtnGestureEventHub->ActClick();
1161     EXPECT_TRUE(flag);
1162 
1163     /**
1164      * @tc.steps: step4. Call OnPlayerStatus status == PREPARED
1165      * @tc.expected: step4. FirePauseEvent & mediaPlayer->GetDuration() has called
1166      */
1167     // case1: MediaPlayer is valid
1168     pauseCheck.clear();
1169     pattern12->OnPlayerStatus(PlaybackStatus::PAUSED);
1170     EXPECT_EQ(pauseCheck, VIDEO_PAUSE_EVENT);
1171 
1172     /**
1173      * @tc.steps: step5. Call OnPlayerStatus status == PLAYBACK_COMPLETE
1174      * @tc.expected: step5. FireFinishEvent & OnUpdateTime(pos = CURRENT_POS) will be called
1175      */
1176     auto videoLayoutProperty = pattern12->GetLayoutProperty<VideoLayoutProperty>();
1177     videoLayoutProperty->UpdateControls(false);
1178     pattern12->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case1: controls = false
1179     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
1180     pattern12->OnPlayerStatus(PlaybackStatus::ERROR);
1181     pattern12->OnPlayerStatus(PlaybackStatus::IDLE);
1182     pattern12->OnPlayerStatus(PlaybackStatus::PREPARED);
1183     pattern12->OnPlayerStatus(PlaybackStatus::PAUSED);
1184     pattern12->OnPlayerStatus(PlaybackStatus::STOPPED);
1185     EXPECT_EQ(stopCheck, VIDEO_STOP_EVENT);
1186     pattern12->OnPlayerStatus(PlaybackStatus::NONE);
1187 }
1188 
1189 /**
1190  * @tc.name: VideoPropertyTest013
1191  * @tc.desc: Create Vdeo, and set its properties.
1192  * @tc.type: FUNC
1193  */
1194 HWTEST_F(VideoTestAddNg, OnPlayerStatusTest013, TestSize.Level1)
1195 {
1196     auto themeManager13 = AceType::MakeRefPtr<MockThemeManager>();
1197     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager13);
1198     EXPECT_CALL(*themeManager13, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<VideoTheme>()));
1199     /**
1200      * @tc.steps: step1. Create Video
1201      * @tc.expected: step1. Create Video successfully
1202      */
1203     auto frameNode = CreateVideoNode(g_testProperty);
1204     ASSERT_TRUE(frameNode);
1205     EXPECT_EQ(frameNode->GetTag(), V2::VIDEO_ETS_TAG);
1206     auto pattern13 = frameNode->GetPattern<VideoPattern>();
1207     ASSERT_TRUE(pattern13);
1208 
1209     /**
1210      * @tc.steps: step2. Prepare the childNode & videoEvent
1211      */
1212     auto controlBar = frameNode->GetChildAtIndex(2);
1213     ASSERT_TRUE(controlBar);
1214 
1215     auto playBtn = AceType::DynamicCast<FrameNode>(controlBar->GetChildAtIndex(0));
1216     ASSERT_TRUE(playBtn);
1217     auto playBtnGestureEventHub = playBtn->GetOrCreateGestureEventHub();
1218     ASSERT_TRUE(playBtnGestureEventHub);
1219 
1220     // set videoEvent
1221     auto videoEventHub13 = frameNode->GetEventHub<VideoEventHub>();
1222     ASSERT_TRUE(videoEventHub13);
1223     std::string startCheck;
__anon130987533202(const std::string& ) 1224     VideoEventCallback onStart = [&startCheck](const std::string& /* param */) { startCheck = VIDEO_START_EVENT; };
1225     std::string pauseCheck;
__anon130987533302(const std::string& ) 1226     VideoEventCallback onPause = [&pauseCheck](const std::string& /* param */) { pauseCheck = VIDEO_PAUSE_EVENT; };
1227     std::string finishCheck;
__anon130987533402(const std::string& ) 1228     VideoEventCallback onFinish = [&finishCheck](const std::string& /* param */) { finishCheck = VIDEO_FINISH_EVENT; };
1229     std::string stopCheck;
__anon130987533502(const std::string& ) 1230     VideoEventCallback onStop = [&stopCheck](const std::string& /* param */) { stopCheck = VIDEO_STOP_EVENT; };
1231     videoEventHub13->SetOnStart(std::move(onStart));
1232     videoEventHub13->SetOnPause(std::move(onPause));
1233     videoEventHub13->SetOnFinish(std::move(onFinish));
1234     videoEventHub13->SetOnStop(std::move(onStop));
1235 
1236     /**
1237      * @tc.steps: step3. Call OnPlayerStatus status == STARTED
1238      * @tc.expected: step3. FireStartEvent has called and playBtn event will call pattern13->Pause()
1239      */
1240     pattern13->OnPlayerStatus(PlaybackStatus::STARTED);
1241     EXPECT_EQ(startCheck, VIDEO_START_EVENT);
1242     // will call pattern13->Pause()
1243     EXPECT_TRUE(pattern13->isPlaying_);
1244     pattern13->isPlaying_ = false;
1245     auto flag = playBtnGestureEventHub->ActClick();
1246     EXPECT_TRUE(flag);
1247 
1248     /**
1249      * @tc.steps: step4. Call OnPlayerStatus status == PREPARED
1250      * @tc.expected: step4. FirePauseEvent & mediaPlayer->GetDuration() has called
1251      */
1252     // case1: MediaPlayer is invalid
1253     pattern13->OnPlayerStatus(PlaybackStatus::PAUSED);
1254     EXPECT_EQ(pauseCheck, VIDEO_PAUSE_EVENT);
1255 
1256     /**
1257      * @tc.steps: step5. Call OnPlayerStatus status == PLAYBACK_COMPLETE
1258      * @tc.expected: step5. FireFinishEvent & OnUpdateTime(pos = CURRENT_POS) will be called
1259      */
1260     pattern13->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case1: controls = true
1261     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
1262     auto videoLayoutProperty = pattern13->GetLayoutProperty<VideoLayoutProperty>();
1263     videoLayoutProperty->UpdateControls(false);
1264 }
1265 
1266 /**
1267  * @tc.name: VideoPropertyTest014
1268  * @tc.desc: Create Vdeo, and set its properties.
1269  * @tc.type: FUNC
1270  */
1271 HWTEST_F(VideoTestAddNg, OnPlayerStatusTest014, TestSize.Level1)
1272 {
1273     auto themeManager14 = AceType::MakeRefPtr<MockThemeManager>();
1274     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager14);
1275     EXPECT_CALL(*themeManager14, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<VideoTheme>()));
1276     /**
1277      * @tc.steps: step1. Create Video
1278      * @tc.expected: step1. Create Video successfully
1279      */
1280     auto frameNode = CreateVideoNode(g_testProperty);
1281     ASSERT_TRUE(frameNode);
1282     EXPECT_EQ(frameNode->GetTag(), V2::VIDEO_ETS_TAG);
1283     auto pattern14 = frameNode->GetPattern<VideoPattern>();
1284     ASSERT_TRUE(pattern14);
1285 
1286     /**
1287      * @tc.steps: step2. Prepare the childNode & videoEvent
1288      */
1289     auto controlBar = frameNode->GetChildAtIndex(2);
1290     ASSERT_TRUE(controlBar);
1291 
1292     auto playBtn = AceType::DynamicCast<FrameNode>(controlBar->GetChildAtIndex(0));
1293     ASSERT_TRUE(playBtn);
1294     auto playBtnGestureEventHub = playBtn->GetOrCreateGestureEventHub();
1295     ASSERT_TRUE(playBtnGestureEventHub);
1296 
1297     // set videoEvent
1298     auto videoEventHub14 = frameNode->GetEventHub<VideoEventHub>();
1299     ASSERT_TRUE(videoEventHub14);
1300     std::string startCheck;
__anon130987533602(const std::string& ) 1301     VideoEventCallback onStart = [&startCheck](const std::string& /* param */) { startCheck = VIDEO_START_EVENT; };
1302     std::string pauseCheck;
__anon130987533702(const std::string& ) 1303     VideoEventCallback onPause = [&pauseCheck](const std::string& /* param */) { pauseCheck = VIDEO_PAUSE_EVENT; };
1304     std::string finishCheck;
__anon130987533802(const std::string& ) 1305     VideoEventCallback onFinish = [&finishCheck](const std::string& /* param */) { finishCheck = VIDEO_FINISH_EVENT; };
1306     std::string stopCheck;
__anon130987533902(const std::string& ) 1307     VideoEventCallback onStop = [&stopCheck](const std::string& /* param */) { stopCheck = VIDEO_STOP_EVENT; };
1308     videoEventHub14->SetOnStart(std::move(onStart));
1309     videoEventHub14->SetOnPause(std::move(onPause));
1310     videoEventHub14->SetOnFinish(std::move(onFinish));
1311     videoEventHub14->SetOnStop(std::move(onStop));
1312 
1313     /**
1314      * @tc.steps: step3. Call OnPlayerStatus status == STARTED
1315      * @tc.expected: step3. FireStartEvent has called and playBtn event will call pattern14->Pause()
1316      */
1317     pattern14->OnPlayerStatus(PlaybackStatus::STARTED);
1318     EXPECT_EQ(startCheck, VIDEO_START_EVENT);
1319     // will call pattern14->Pause()
1320     EXPECT_TRUE(pattern14->isPlaying_);
1321     // case1: MediaPlayer is valid & isPlaying = false
1322     pattern14->isPlaying_ = false;
1323     auto flag = playBtnGestureEventHub->ActClick();
1324     EXPECT_TRUE(flag);
1325 
1326     /**
1327      * @tc.steps: step4. Call OnPlayerStatus status == PREPARED
1328      * @tc.expected: step4. FirePauseEvent & mediaPlayer->GetDuration() has called
1329      */
1330     // case1: MediaPlayer is valid
1331     pauseCheck.clear();
1332     pattern14->OnPlayerStatus(PlaybackStatus::PAUSED);
1333     EXPECT_EQ(pauseCheck, VIDEO_PAUSE_EVENT);
1334 
1335     /**
1336      * @tc.steps: step5. Call OnPlayerStatus status == PLAYBACK_COMPLETE
1337      * @tc.expected: step5. FireFinishEvent & OnUpdateTime(pos = CURRENT_POS) will be called
1338      */
1339     pattern14->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case1: controls = true
1340     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
1341     auto videoLayoutProperty = pattern14->GetLayoutProperty<VideoLayoutProperty>();
1342     videoLayoutProperty->UpdateControls(false);
1343 }
1344 
1345 /**
1346  * @tc.name: VideoPropertyTest015
1347  * @tc.desc: Create Vdeo, and set its properties.
1348  * @tc.type: FUNC
1349  */
1350 HWTEST_F(VideoTestAddNg, OnPlayerStatusTest015, TestSize.Level1)
1351 {
1352     auto themeManager15 = AceType::MakeRefPtr<MockThemeManager>();
1353     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager15);
1354     EXPECT_CALL(*themeManager15, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<VideoTheme>()));
1355     /**
1356      * @tc.steps: step1. Create Video
1357      * @tc.expected: step1. Create Video successfully
1358      */
1359     auto frameNode = CreateVideoNode(g_testProperty);
1360     ASSERT_TRUE(frameNode);
1361     EXPECT_EQ(frameNode->GetTag(), V2::VIDEO_ETS_TAG);
1362     auto pattern15 = frameNode->GetPattern<VideoPattern>();
1363     ASSERT_TRUE(pattern15);
1364 
1365     /**
1366      * @tc.steps: step2. Prepare the childNode & videoEvent
1367      */
1368     auto controlBar = frameNode->GetChildAtIndex(2);
1369     ASSERT_TRUE(controlBar);
1370 
1371     auto playBtn = AceType::DynamicCast<FrameNode>(controlBar->GetChildAtIndex(0));
1372     ASSERT_TRUE(playBtn);
1373     auto playBtnGestureEventHub = playBtn->GetOrCreateGestureEventHub();
1374     ASSERT_TRUE(playBtnGestureEventHub);
1375 
1376     // set videoEvent
1377     auto videoEventHub15 = frameNode->GetEventHub<VideoEventHub>();
1378     ASSERT_TRUE(videoEventHub15);
1379     std::string startCheck;
__anon130987533a02(const std::string& ) 1380     VideoEventCallback onStart = [&startCheck](const std::string& /* param */) { startCheck = VIDEO_START_EVENT; };
1381     std::string pauseCheck;
__anon130987533b02(const std::string& ) 1382     VideoEventCallback onPause = [&pauseCheck](const std::string& /* param */) { pauseCheck = VIDEO_PAUSE_EVENT; };
1383     std::string finishCheck;
__anon130987533c02(const std::string& ) 1384     VideoEventCallback onFinish = [&finishCheck](const std::string& /* param */) { finishCheck = VIDEO_FINISH_EVENT; };
1385     std::string stopCheck;
__anon130987533d02(const std::string& ) 1386     VideoEventCallback onStop = [&stopCheck](const std::string& /* param */) { stopCheck = VIDEO_STOP_EVENT; };
1387     videoEventHub15->SetOnStart(std::move(onStart));
1388     videoEventHub15->SetOnPause(std::move(onPause));
1389     videoEventHub15->SetOnFinish(std::move(onFinish));
1390     videoEventHub15->SetOnStop(std::move(onStop));
1391 
1392     /**
1393      * @tc.steps: step3. Call OnPlayerStatus status == STARTED
1394      * @tc.expected: step3. FireStartEvent has called and playBtn event will call pattern15->Pause()
1395      */
1396     pattern15->OnPlayerStatus(PlaybackStatus::STARTED);
1397     EXPECT_EQ(startCheck, VIDEO_START_EVENT);
1398     // will call pattern15->Pause()
1399     EXPECT_TRUE(pattern15->isPlaying_);
1400     pattern15->isPlaying_ = false;
1401     auto flag = playBtnGestureEventHub->ActClick();
1402     EXPECT_TRUE(flag);
1403 
1404     /**
1405      * @tc.steps: step4. Call OnPlayerStatus status == PREPARED
1406      * @tc.expected: step4. FirePauseEvent & mediaPlayer->GetDuration() has called
1407      */
1408     // case1: MediaPlayer is invalid
1409     pattern15->OnPlayerStatus(PlaybackStatus::PAUSED);
1410     EXPECT_EQ(pauseCheck, VIDEO_PAUSE_EVENT);
1411 
1412     /**
1413      * @tc.steps: step5. Call OnPlayerStatus status == PLAYBACK_COMPLETE
1414      * @tc.expected: step5. FireFinishEvent & OnUpdateTime(pos = CURRENT_POS) will be called
1415      */
1416     auto videoLayoutProperty = pattern15->GetLayoutProperty<VideoLayoutProperty>();
1417     videoLayoutProperty->UpdateControls(false);
1418     pattern15->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case2: controls = false
1419     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
1420     pattern15->OnPlayerStatus(PlaybackStatus::ERROR);
1421     pattern15->OnPlayerStatus(PlaybackStatus::IDLE);
1422     pattern15->OnPlayerStatus(PlaybackStatus::PREPARED);
1423     pattern15->OnPlayerStatus(PlaybackStatus::PAUSED);
1424     pattern15->OnPlayerStatus(PlaybackStatus::STOPPED);
1425     EXPECT_EQ(stopCheck, VIDEO_STOP_EVENT);
1426     pattern15->OnPlayerStatus(PlaybackStatus::NONE);
1427 }
1428 
1429 /**
1430  * @tc.name: VideoPropertyTest016
1431  * @tc.desc: Create Vdeo, and set its properties.
1432  * @tc.type: FUNC
1433  */
1434 HWTEST_F(VideoTestAddNg, OnPlayerStatusTest016, TestSize.Level1)
1435 {
1436     auto themeManager16 = AceType::MakeRefPtr<MockThemeManager>();
1437     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager16);
1438     EXPECT_CALL(*themeManager16, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<VideoTheme>()));
1439     /**
1440      * @tc.steps: step1. Create Video
1441      * @tc.expected: step1. Create Video successfully
1442      */
1443     auto frameNode = CreateVideoNode(g_testProperty);
1444     EXPECT_EQ(frameNode->GetTag(), V2::VIDEO_ETS_TAG);
1445     auto pattern16 = frameNode->GetPattern<VideoPattern>();
1446 
1447     /**
1448      * @tc.steps: step2. Prepare the childNode & videoEvent
1449      */
1450     auto controlBar = frameNode->GetChildAtIndex(2);
1451     auto playBtn = AceType::DynamicCast<FrameNode>(controlBar->GetChildAtIndex(0));
1452     auto playBtnGestureEventHub = playBtn->GetOrCreateGestureEventHub();
1453 
1454     // set videoEvent
1455     auto videoEventHub16 = frameNode->GetEventHub<VideoEventHub>();
1456     ASSERT_TRUE(videoEventHub16);
1457     std::string startCheck;
__anon130987533e02(const std::string& ) 1458     VideoEventCallback onStart = [&startCheck](const std::string& /* param */) { startCheck = VIDEO_START_EVENT; };
1459     std::string pauseCheck;
__anon130987533f02(const std::string& ) 1460     VideoEventCallback onPause = [&pauseCheck](const std::string& /* param */) { pauseCheck = VIDEO_PAUSE_EVENT; };
1461     std::string finishCheck;
__anon130987534002(const std::string& ) 1462     VideoEventCallback onFinish = [&finishCheck](const std::string& /* param */) { finishCheck = VIDEO_FINISH_EVENT; };
1463     std::string stopCheck;
__anon130987534102(const std::string& ) 1464     VideoEventCallback onStop = [&stopCheck](const std::string& /* param */) { stopCheck = VIDEO_STOP_EVENT; };
1465     videoEventHub16->SetOnStart(std::move(onStart));
1466     videoEventHub16->SetOnPause(std::move(onPause));
1467     videoEventHub16->SetOnFinish(std::move(onFinish));
1468     videoEventHub16->SetOnStop(std::move(onStop));
1469 
1470     /**
1471      * @tc.steps: step3. Call OnPlayerStatus status == STARTED
1472      * @tc.expected: step3. FireStartEvent has called and playBtn event will call pattern16->Pause()
1473      */
1474     pattern16->OnPlayerStatus(PlaybackStatus::STARTED);
1475     EXPECT_EQ(startCheck, VIDEO_START_EVENT);
1476     // will call pattern16->Pause()
1477     EXPECT_TRUE(pattern16->isPlaying_);
1478     pattern16->isPlaying_ = false;
1479     auto flag = playBtnGestureEventHub->ActClick();
1480     EXPECT_TRUE(flag);
1481 
1482     /**
1483      * @tc.steps: step4. Call OnPlayerStatus status == PREPARED
1484      * @tc.expected: step4. FirePauseEvent & mediaPlayer->GetDuration() has called
1485      */
1486     // case1: MediaPlayer is invalid
1487     pattern16->OnPlayerStatus(PlaybackStatus::PAUSED);
1488     EXPECT_EQ(pauseCheck, VIDEO_PAUSE_EVENT);
1489 
1490     // case1: MediaPlayer is valid
1491     pauseCheck.clear();
1492     pattern16->OnPlayerStatus(PlaybackStatus::PAUSED);
1493     EXPECT_EQ(pauseCheck, VIDEO_PAUSE_EVENT);
1494 
1495     /**
1496      * @tc.steps: step5. Call OnPlayerStatus status == PLAYBACK_COMPLETE
1497      * @tc.expected: step5. FireFinishEvent & OnUpdateTime(pos = CURRENT_POS) will be called
1498      */
1499     auto videoLayoutProperty = pattern16->GetLayoutProperty<VideoLayoutProperty>();
1500     videoLayoutProperty->UpdateControls(false);
1501     pattern16->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case2: controls = false
1502     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
1503     pattern16->OnPlayerStatus(PlaybackStatus::ERROR);
1504     pattern16->OnPlayerStatus(PlaybackStatus::IDLE);
1505     pattern16->OnPlayerStatus(PlaybackStatus::PREPARED);
1506     pattern16->OnPlayerStatus(PlaybackStatus::PAUSED);
1507     pattern16->OnPlayerStatus(PlaybackStatus::STOPPED);
1508     EXPECT_EQ(stopCheck, VIDEO_STOP_EVENT);
1509     pattern16->OnPlayerStatus(PlaybackStatus::NONE);
1510 }
1511 
1512 /**
1513  * @tc.name: VideoPropertyTest017
1514  * @tc.desc: Create Vdeo, and set its properties.
1515  * @tc.type: FUNC
1516  */
1517 HWTEST_F(VideoTestAddNg, OnPlayerStatusTest017, TestSize.Level1)
1518 {
1519     auto themeManager17 = AceType::MakeRefPtr<MockThemeManager>();
1520     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager17);
1521     EXPECT_CALL(*themeManager17, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<VideoTheme>()));
1522     /**
1523      * @tc.steps: step1. Create Video
1524      * @tc.expected: step1. Create Video successfully
1525      */
1526     auto frameNode = CreateVideoNode(g_testProperty);
1527     EXPECT_EQ(frameNode->GetTag(), V2::VIDEO_ETS_TAG);
1528     auto pattern17 = frameNode->GetPattern<VideoPattern>();
1529 
1530     /**
1531      * @tc.steps: step2. Prepare the childNode & videoEvent
1532      */
1533     auto controlBar = frameNode->GetChildAtIndex(2);
1534     auto playBtn = AceType::DynamicCast<FrameNode>(controlBar->GetChildAtIndex(0));
1535     auto playBtnGestureEventHub = playBtn->GetOrCreateGestureEventHub();
1536     ASSERT_TRUE(playBtnGestureEventHub);
1537 
1538     // set videoEvent
1539     auto videoEventHub17 = frameNode->GetEventHub<VideoEventHub>();
1540     ASSERT_TRUE(videoEventHub17);
1541     std::string startCheck;
__anon130987534202(const std::string& ) 1542     VideoEventCallback onStart = [&startCheck](const std::string& /* param */) { startCheck = VIDEO_START_EVENT; };
1543     std::string pauseCheck;
__anon130987534302(const std::string& ) 1544     VideoEventCallback onPause = [&pauseCheck](const std::string& /* param */) { pauseCheck = VIDEO_PAUSE_EVENT; };
1545     std::string finishCheck;
__anon130987534402(const std::string& ) 1546     VideoEventCallback onFinish = [&finishCheck](const std::string& /* param */) { finishCheck = VIDEO_FINISH_EVENT; };
1547     std::string stopCheck;
__anon130987534502(const std::string& ) 1548     VideoEventCallback onStop = [&stopCheck](const std::string& /* param */) { stopCheck = VIDEO_STOP_EVENT; };
1549     videoEventHub17->SetOnStart(std::move(onStart));
1550     videoEventHub17->SetOnPause(std::move(onPause));
1551     videoEventHub17->SetOnFinish(std::move(onFinish));
1552     videoEventHub17->SetOnStop(std::move(onStop));
1553 
1554     /**
1555      * @tc.steps: step3. Call OnPlayerStatus status == STARTED
1556      * @tc.expected: step3. FireStartEvent has called and playBtn event will call pattern17->Pause()
1557      */
1558     pattern17->OnPlayerStatus(PlaybackStatus::STARTED);
1559     EXPECT_EQ(startCheck, VIDEO_START_EVENT);
1560     // will call pattern17->Pause()
1561     EXPECT_TRUE(pattern17->isPlaying_);
1562     // case1: MediaPlayer is valid & isPlaying = true
1563     EXPECT_CALL(*(AceType::DynamicCast<MockMediaPlayer>(pattern17->mediaPlayer_)),
1564                   Pause()).Times(1).WillOnce(Return(0));
1565     auto flag = playBtnGestureEventHub->ActClick();
1566     EXPECT_TRUE(flag);
1567 
1568     /**
1569      * @tc.steps: step4. Call OnPlayerStatus status == PREPARED
1570      * @tc.expected: step4. FirePauseEvent & mediaPlayer->GetDuration() has called
1571      */
1572     // case1: MediaPlayer is invalid
1573     pattern17->OnPlayerStatus(PlaybackStatus::PAUSED);
1574     EXPECT_EQ(pauseCheck, VIDEO_PAUSE_EVENT);
1575 
1576     /**
1577      * @tc.steps: step5. Call OnPlayerStatus status == PLAYBACK_COMPLETE
1578      * @tc.expected: step5. FireFinishEvent & OnUpdateTime(pos = CURRENT_POS) will be called
1579      */
1580     pattern17->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case1: controls = true
1581     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
1582     auto videoLayoutProperty = pattern17->GetLayoutProperty<VideoLayoutProperty>();
1583     videoLayoutProperty->UpdateControls(false);
1584     pattern17->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case2: controls = false
1585     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
1586     pattern17->OnPlayerStatus(PlaybackStatus::ERROR);
1587     pattern17->OnPlayerStatus(PlaybackStatus::IDLE);
1588     pattern17->OnPlayerStatus(PlaybackStatus::PREPARED);
1589     pattern17->OnPlayerStatus(PlaybackStatus::PAUSED);
1590     pattern17->OnPlayerStatus(PlaybackStatus::STOPPED);
1591     EXPECT_EQ(stopCheck, VIDEO_STOP_EVENT);
1592     pattern17->OnPlayerStatus(PlaybackStatus::NONE);
1593 }
1594 
1595 /**
1596  * @tc.name: VideoPropertyTest018
1597  * @tc.desc: Create Vdeo, and set its properties.
1598  * @tc.type: FUNC
1599  */
1600 HWTEST_F(VideoTestAddNg, OnPlayerStatusTest018, TestSize.Level1)
1601 {
1602     auto themeManager18 = AceType::MakeRefPtr<MockThemeManager>();
1603     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager18);
1604     EXPECT_CALL(*themeManager18, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<VideoTheme>()));
1605     /**
1606      * @tc.steps: step1. Create Video
1607      * @tc.expected: step1. Create Video successfully
1608      */
1609     auto frameNode = CreateVideoNode(g_testProperty);
1610     ASSERT_TRUE(frameNode);
1611     EXPECT_EQ(frameNode->GetTag(), V2::VIDEO_ETS_TAG);
1612     auto pattern18 = frameNode->GetPattern<VideoPattern>();
1613     ASSERT_TRUE(pattern18);
1614 
1615     /**
1616      * @tc.steps: step2. Prepare the childNode & videoEvent
1617      */
1618     auto controlBar = frameNode->GetChildAtIndex(2);
1619     ASSERT_TRUE(controlBar);
1620 
1621     auto playBtn = AceType::DynamicCast<FrameNode>(controlBar->GetChildAtIndex(0));
1622     ASSERT_TRUE(playBtn);
1623     auto playBtnGestureEventHub = playBtn->GetOrCreateGestureEventHub();
1624     ASSERT_TRUE(playBtnGestureEventHub);
1625 
1626     // set videoEvent
1627     auto videoEventHub18 = frameNode->GetEventHub<VideoEventHub>();
1628     ASSERT_TRUE(videoEventHub18);
1629     std::string startCheck;
__anon130987534602(const std::string& ) 1630     VideoEventCallback onStart = [&startCheck](const std::string& /* param */) { startCheck = VIDEO_START_EVENT; };
1631     std::string pauseCheck;
__anon130987534702(const std::string& ) 1632     VideoEventCallback onPause = [&pauseCheck](const std::string& /* param */) { pauseCheck = VIDEO_PAUSE_EVENT; };
1633     std::string finishCheck;
__anon130987534802(const std::string& ) 1634     VideoEventCallback onFinish = [&finishCheck](const std::string& /* param */) { finishCheck = VIDEO_FINISH_EVENT; };
1635     std::string stopCheck;
__anon130987534902(const std::string& ) 1636     VideoEventCallback onStop = [&stopCheck](const std::string& /* param */) { stopCheck = VIDEO_STOP_EVENT; };
1637     videoEventHub18->SetOnStart(std::move(onStart));
1638     videoEventHub18->SetOnPause(std::move(onPause));
1639     videoEventHub18->SetOnFinish(std::move(onFinish));
1640     videoEventHub18->SetOnStop(std::move(onStop));
1641 
1642     /**
1643      * @tc.steps: step3. Call OnPlayerStatus status == STARTED
1644      * @tc.expected: step3. FireStartEvent has called and playBtn event will call pattern18->Pause()
1645      */
1646     pattern18->OnPlayerStatus(PlaybackStatus::STARTED);
1647     EXPECT_EQ(startCheck, VIDEO_START_EVENT);
1648     // will call pattern18->Pause()
1649     EXPECT_TRUE(pattern18->isPlaying_);
1650     // case1: MediaPlayer is valid & isPlaying = true
1651     EXPECT_CALL(*(AceType::DynamicCast<MockMediaPlayer>(pattern18->mediaPlayer_)),
1652                   Pause()).Times(1).WillOnce(Return(0));
1653     auto flag = playBtnGestureEventHub->ActClick();
1654     EXPECT_TRUE(flag);
1655 
1656     /**
1657      * @tc.steps: step4. Call OnPlayerStatus status == PREPARED
1658      * @tc.expected: step4. FirePauseEvent & mediaPlayer->GetDuration() has called
1659      */
1660     // case1: MediaPlayer is invalid
1661     pattern18->OnPlayerStatus(PlaybackStatus::PAUSED);
1662     EXPECT_EQ(pauseCheck, VIDEO_PAUSE_EVENT);
1663 
1664     /**
1665      * @tc.steps: step5. Call OnPlayerStatus status == PLAYBACK_COMPLETE
1666      * @tc.expected: step5. FireFinishEvent & OnUpdateTime(pos = CURRENT_POS) will be called
1667      */
1668     auto videoLayoutProperty = pattern18->GetLayoutProperty<VideoLayoutProperty>();
1669     videoLayoutProperty->UpdateControls(false);
1670     pattern18->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case2: controls = false
1671     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
1672     pattern18->OnPlayerStatus(PlaybackStatus::ERROR);
1673     pattern18->OnPlayerStatus(PlaybackStatus::IDLE);
1674     pattern18->OnPlayerStatus(PlaybackStatus::PREPARED);
1675     pattern18->OnPlayerStatus(PlaybackStatus::PAUSED);
1676     pattern18->OnPlayerStatus(PlaybackStatus::STOPPED);
1677     EXPECT_EQ(stopCheck, VIDEO_STOP_EVENT);
1678     pattern18->OnPlayerStatus(PlaybackStatus::NONE);
1679 }
1680 
1681 /**
1682  * @tc.name: VideoPropertyTest019
1683  * @tc.desc: Create Vdeo, and set its properties.
1684  * @tc.type: FUNC
1685  */
1686 HWTEST_F(VideoTestAddNg, OnPlayerStatusTest019, TestSize.Level1)
1687 {
1688     auto themeManager19 = AceType::MakeRefPtr<MockThemeManager>();
1689     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager19);
1690     EXPECT_CALL(*themeManager19, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<VideoTheme>()));
1691     /**
1692      * @tc.steps: step1. Create Video
1693      * @tc.expected: step1. Create Video successfully
1694      */
1695     auto frameNode = CreateVideoNode(g_testProperty);
1696     ASSERT_TRUE(frameNode);
1697     EXPECT_EQ(frameNode->GetTag(), V2::VIDEO_ETS_TAG);
1698     auto pattern19 = frameNode->GetPattern<VideoPattern>();
1699     ASSERT_TRUE(pattern19);
1700 
1701     /**
1702      * @tc.steps: step2. Prepare the childNode & videoEvent
1703      */
1704     auto controlBar = frameNode->GetChildAtIndex(2);
1705     ASSERT_TRUE(controlBar);
1706 
1707     auto playBtn = AceType::DynamicCast<FrameNode>(controlBar->GetChildAtIndex(0));
1708     ASSERT_TRUE(playBtn);
1709     auto playBtnGestureEventHub = playBtn->GetOrCreateGestureEventHub();
1710     ASSERT_TRUE(playBtnGestureEventHub);
1711 
1712     // set videoEvent
1713     auto videoEventHub19 = frameNode->GetEventHub<VideoEventHub>();
1714     ASSERT_TRUE(videoEventHub19);
1715     std::string startCheck;
__anon130987534a02(const std::string& ) 1716     VideoEventCallback onStart = [&startCheck](const std::string& /* param */) { startCheck = VIDEO_START_EVENT; };
1717     std::string pauseCheck;
__anon130987534b02(const std::string& ) 1718     VideoEventCallback onPause = [&pauseCheck](const std::string& /* param */) { pauseCheck = VIDEO_PAUSE_EVENT; };
1719     std::string finishCheck;
__anon130987534c02(const std::string& ) 1720     VideoEventCallback onFinish = [&finishCheck](const std::string& /* param */) { finishCheck = VIDEO_FINISH_EVENT; };
1721     std::string stopCheck;
__anon130987534d02(const std::string& ) 1722     VideoEventCallback onStop = [&stopCheck](const std::string& /* param */) { stopCheck = VIDEO_STOP_EVENT; };
1723     videoEventHub19->SetOnStart(std::move(onStart));
1724     videoEventHub19->SetOnPause(std::move(onPause));
1725     videoEventHub19->SetOnFinish(std::move(onFinish));
1726     videoEventHub19->SetOnStop(std::move(onStop));
1727 
1728     /**
1729      * @tc.steps: step3. Call OnPlayerStatus status == STARTED
1730      * @tc.expected: step3. FireStartEvent has called and playBtn event will call pattern19->Pause()
1731      */
1732     pattern19->OnPlayerStatus(PlaybackStatus::STARTED);
1733     EXPECT_EQ(startCheck, VIDEO_START_EVENT);
1734     // will call pattern19->Pause()
1735     EXPECT_TRUE(pattern19->isPlaying_);
1736     // case1: MediaPlayer is valid & isPlaying = true
1737     EXPECT_CALL(*(AceType::DynamicCast<MockMediaPlayer>(pattern19->mediaPlayer_)),
1738                   Pause()).Times(1).WillOnce(Return(0));
1739     auto flag = playBtnGestureEventHub->ActClick();
1740     EXPECT_TRUE(flag);
1741 
1742     /**
1743      * @tc.steps: step4. Call OnPlayerStatus status == PREPARED
1744      * @tc.expected: step4. FirePauseEvent & mediaPlayer->GetDuration() has called
1745      */
1746     // case1: MediaPlayer is valid
1747     pauseCheck.clear();
1748     pattern19->OnPlayerStatus(PlaybackStatus::PAUSED);
1749     EXPECT_EQ(pauseCheck, VIDEO_PAUSE_EVENT);
1750 
1751     /**
1752      * @tc.steps: step5. Call OnPlayerStatus status == PLAYBACK_COMPLETE
1753      * @tc.expected: step5. FireFinishEvent & OnUpdateTime(pos = CURRENT_POS) will be called
1754      */
1755     pattern19->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case1: controls = true
1756     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
1757     auto videoLayoutProperty = pattern19->GetLayoutProperty<VideoLayoutProperty>();
1758     videoLayoutProperty->UpdateControls(false);
1759 }
1760 
1761 /**
1762  * @tc.name: VideoPropertyTest020
1763  * @tc.desc: Create Vdeo, and set its properties.
1764  * @tc.type: FUNC
1765  */
1766 HWTEST_F(VideoTestAddNg, OnPlayerStatusTest020, TestSize.Level1)
1767 {
1768 auto themeManager20 = AceType::MakeRefPtr<MockThemeManager>();
1769     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager20);
1770     EXPECT_CALL(*themeManager20, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<VideoTheme>()));
1771     /**
1772      * @tc.steps: step1. Create Video
1773      * @tc.expected: step1. Create Video successfully
1774      */
1775     auto frameNode = CreateVideoNode(g_testProperty);
1776     EXPECT_EQ(frameNode->GetTag(), V2::VIDEO_ETS_TAG);
1777     auto pattern20 = frameNode->GetPattern<VideoPattern>();
1778 
1779     /**
1780      * @tc.steps: step2. Prepare the childNode & videoEvent
1781      */
1782     auto controlBar = frameNode->GetChildAtIndex(2);
1783     auto playBtn = AceType::DynamicCast<FrameNode>(controlBar->GetChildAtIndex(0));
1784     auto playBtnGestureEventHub = playBtn->GetOrCreateGestureEventHub();
1785 
1786     // set videoEvent
1787     auto videoEventHub20 = frameNode->GetEventHub<VideoEventHub>();
1788     ASSERT_TRUE(videoEventHub20);
1789     std::string startCheck;
__anon130987534e02(const std::string& ) 1790     VideoEventCallback onStart = [&startCheck](const std::string& /* param */) { startCheck = VIDEO_START_EVENT; };
1791     std::string pauseCheck;
__anon130987534f02(const std::string& ) 1792     VideoEventCallback onPause = [&pauseCheck](const std::string& /* param */) { pauseCheck = VIDEO_PAUSE_EVENT; };
1793     std::string finishCheck;
__anon130987535002(const std::string& ) 1794     VideoEventCallback onFinish = [&finishCheck](const std::string& /* param */) { finishCheck = VIDEO_FINISH_EVENT; };
1795     std::string stopCheck;
__anon130987535102(const std::string& ) 1796     VideoEventCallback onStop = [&stopCheck](const std::string& /* param */) { stopCheck = VIDEO_STOP_EVENT; };
1797     videoEventHub20->SetOnStart(std::move(onStart));
1798     videoEventHub20->SetOnPause(std::move(onPause));
1799     videoEventHub20->SetOnFinish(std::move(onFinish));
1800     videoEventHub20->SetOnStop(std::move(onStop));
1801 
1802     /**
1803      * @tc.steps: step3. Call OnPlayerStatus status == STARTED
1804      * @tc.expected: step3. FireStartEvent has called and playBtn event will call pattern20->Pause()
1805      */
1806     pattern20->OnPlayerStatus(PlaybackStatus::STARTED);
1807     EXPECT_EQ(startCheck, VIDEO_START_EVENT);
1808     // will call pattern20->Pause()
1809     EXPECT_TRUE(pattern20->isPlaying_);
1810     // case1: MediaPlayer is valid & isPlaying = true
1811     EXPECT_CALL(*(AceType::DynamicCast<MockMediaPlayer>(pattern20->mediaPlayer_)),
1812                   Pause()).Times(1).WillOnce(Return(0));
1813     auto flag = playBtnGestureEventHub->ActClick();
1814     EXPECT_TRUE(flag);
1815 
1816     /**
1817      * @tc.steps: step4. Call OnPlayerStatus status == PREPARED
1818      * @tc.expected: step4. FirePauseEvent & mediaPlayer->GetDuration() has called
1819      */
1820     // case1: MediaPlayer is valid
1821     pauseCheck.clear();
1822     pattern20->OnPlayerStatus(PlaybackStatus::PAUSED);
1823     EXPECT_EQ(pauseCheck, VIDEO_PAUSE_EVENT);
1824 
1825     /**
1826      * @tc.steps: step5. Call OnPlayerStatus status == PLAYBACK_COMPLETE
1827      * @tc.expected: step5. FireFinishEvent & OnUpdateTime(pos = CURRENT_POS) will be called
1828      */
1829     auto videoLayoutProperty = pattern20->GetLayoutProperty<VideoLayoutProperty>();
1830     videoLayoutProperty->UpdateControls(false);
1831     pattern20->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case2: controls = false
1832     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
1833     pattern20->OnPlayerStatus(PlaybackStatus::ERROR);
1834     pattern20->OnPlayerStatus(PlaybackStatus::IDLE);
1835     pattern20->OnPlayerStatus(PlaybackStatus::PREPARED);
1836     pattern20->OnPlayerStatus(PlaybackStatus::PAUSED);
1837     pattern20->OnPlayerStatus(PlaybackStatus::STOPPED);
1838     EXPECT_EQ(stopCheck, VIDEO_STOP_EVENT);
1839     pattern20->OnPlayerStatus(PlaybackStatus::NONE);
1840 }
1841 
1842 /**
1843  * @tc.name: VideoPropertyTest021
1844  * @tc.desc: Create Vdeo, and set its properties.
1845  * @tc.type: FUNC
1846  */
1847 HWTEST_F(VideoTestAddNg, OnPlayerStatusTest021, TestSize.Level1)
1848 {
1849     auto themeManager21 = AceType::MakeRefPtr<MockThemeManager>();
1850     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager21);
1851     EXPECT_CALL(*themeManager21, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<VideoTheme>()));
1852     /**
1853      * @tc.steps: step1. Create Video
1854      * @tc.expected: step1. Create Video successfully
1855      */
1856     auto frameNode = CreateVideoNode(g_testProperty);
1857     EXPECT_EQ(frameNode->GetTag(), V2::VIDEO_ETS_TAG);
1858     auto pattern21 = frameNode->GetPattern<VideoPattern>();
1859 
1860     /**
1861      * @tc.steps: step2. Prepare the childNode & videoEvent
1862      */
1863     auto controlBar = frameNode->GetChildAtIndex(2);
1864     auto playBtn = AceType::DynamicCast<FrameNode>(controlBar->GetChildAtIndex(0));
1865     auto playBtnGestureEventHub = playBtn->GetOrCreateGestureEventHub();
1866 
1867     // set videoEvent
1868     auto videoEventHub21 = frameNode->GetEventHub<VideoEventHub>();
1869     std::string startCheck;
__anon130987535202(const std::string& ) 1870     VideoEventCallback onStart = [&startCheck](const std::string& /* param */) { startCheck = VIDEO_START_EVENT; };
1871     std::string pauseCheck;
__anon130987535302(const std::string& ) 1872     VideoEventCallback onPause = [&pauseCheck](const std::string& /* param */) { pauseCheck = VIDEO_PAUSE_EVENT; };
1873     std::string finishCheck;
__anon130987535402(const std::string& ) 1874     VideoEventCallback onFinish = [&finishCheck](const std::string& /* param */) { finishCheck = VIDEO_FINISH_EVENT; };
1875     std::string stopCheck;
__anon130987535502(const std::string& ) 1876     VideoEventCallback onStop = [&stopCheck](const std::string& /* param */) { stopCheck = VIDEO_STOP_EVENT; };
1877     videoEventHub21->SetOnStart(std::move(onStart));
1878     videoEventHub21->SetOnPause(std::move(onPause));
1879     videoEventHub21->SetOnFinish(std::move(onFinish));
1880     videoEventHub21->SetOnStop(std::move(onStop));
1881 
1882     /**
1883      * @tc.steps: step3. Call OnPlayerStatus status == STARTED
1884      * @tc.expected: step3. FireStartEvent has called and playBtn event will call pattern21->Pause()
1885      */
1886     pattern21->OnPlayerStatus(PlaybackStatus::STARTED);
1887     EXPECT_EQ(startCheck, VIDEO_START_EVENT);
1888     // will call pattern21->Pause()
1889     EXPECT_TRUE(pattern21->isPlaying_);
1890     // case1: MediaPlayer is invalid
1891     auto flag = playBtnGestureEventHub->ActClick();
1892     EXPECT_TRUE(flag);
1893     // case2: MediaPlayer is valid & isPlaying = true
1894     EXPECT_CALL(*(AceType::DynamicCast<MockMediaPlayer>(pattern21->mediaPlayer_)),
1895                   Pause()).Times(2).WillOnce(Return(0));
1896     flag = playBtnGestureEventHub->ActClick();
1897     EXPECT_TRUE(flag);
1898     // case3: MediaPlayer is valid & isPlaying = false
1899     pattern21->isPlaying_ = false;
1900     flag = playBtnGestureEventHub->ActClick();
1901     EXPECT_TRUE(flag);
1902     pattern21->OnPlayerStatus(PlaybackStatus::PAUSED);
1903     EXPECT_EQ(pauseCheck, VIDEO_PAUSE_EVENT);
1904 
1905     /**
1906      * @tc.steps: step5. Call OnPlayerStatus status == PLAYBACK_COMPLETE
1907      * @tc.expected: step5. FireFinishEvent & OnUpdateTime(pos = CURRENT_POS) will be called
1908      */
1909     pattern21->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case1: controls = true
1910     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
1911     auto videoLayoutProperty = pattern21->GetLayoutProperty<VideoLayoutProperty>();
1912     videoLayoutProperty->UpdateControls(false);
1913     pattern21->OnPlayerStatus(PlaybackStatus::PLAYBACK_COMPLETE); // case2: controls = false
1914     EXPECT_EQ(finishCheck, VIDEO_FINISH_EVENT);
1915     pattern21->OnPlayerStatus(PlaybackStatus::ERROR);
1916     pattern21->OnPlayerStatus(PlaybackStatus::IDLE);
1917     pattern21->OnPlayerStatus(PlaybackStatus::PREPARED);
1918     pattern21->OnPlayerStatus(PlaybackStatus::PAUSED);
1919     pattern21->OnPlayerStatus(PlaybackStatus::STOPPED);
1920     EXPECT_EQ(stopCheck, VIDEO_STOP_EVENT);
1921 }
1922 } // namespace OHOS::Ace::NG