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