From 79164c42c5d340157a9aef79b2622103ee8051c2 Mon Sep 17 00:00:00 2001 From: freemanmmmm Date: Mon, 18 Aug 2025 20:32:47 +0800 Subject: [PATCH 1/4] =?UTF-8?q?GetApiVersion=E3=80=81IsSeekContinuousSuppo?= =?UTF-8?q?rted=E3=80=81GetPlaybackPosition=20Signed-off-by:=20freemanmmmm?= =?UTF-8?q?=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../test/unittest/src/player_unit_test.cpp | 185 ++++++++++++++++++ 1 file changed, 185 insertions(+) diff --git a/frameworks/native/player/test/unittest/src/player_unit_test.cpp b/frameworks/native/player/test/unittest/src/player_unit_test.cpp index e8a75c839..b3e2f0068 100644 --- a/frameworks/native/player/test/unittest/src/player_unit_test.cpp +++ b/frameworks/native/player/test/unittest/src/player_unit_test.cpp @@ -4741,5 +4741,190 @@ HWTEST_F(PlayerUnitTest, Player_EnableReportMediaProgress_004, TestSize.Level0) ASSERT_EQ(MSERR_OK, player_->EnableReportMediaProgress(true)); EXPECT_EQ(MSERR_OK, player_->Play()); } + +/** + * @tc.name : Test GetApiVersion for valid version + * @tc.number: Player_GetApiVersion_001 + * @tc.desc : Test GetApiVersion returns valid api version successfully + */ +HWTEST_F(PlayerUnitTest, Player_GetApiVersion_001, TestSize.Level0) +{ + // 初始化播放器并设置媒体源(接口无明确要求,但保持与其他用例一致的环境) + ASSERT_EQ(MSERR_OK, player_->SetSource(VIDEO_FILE1)); + sptr videoSurface = player_->GetVideoSurface(); + ASSERT_NE(nullptr, videoSurface); + EXPECT_EQ(MSERR_OK, player_->SetVideoSurface(videoSurface)); + + // 调用接口获取API版本 + int32_t apiVersion = -1; + EXPECT_EQ(MSERR_OK, player_->GetApiVersion(apiVersion)); + + // 验证版本号为有效正值(通常API版本从1.0开始,此处假设为非负数) + EXPECT_GE(apiVersion, 0); +} + +/** + * @tc.name : Test GetApiVersion with invalid parameter + * @tc.number: Player_GetApiVersion_004 + * @tc.desc : Test GetApiVersion handles invalid parameter (theoretically impossible for reference) + */ +HWTEST_F(PlayerUnitTest, Player_GetApiVersion_002, TestSize.Level0) +{ + // 注意:接口参数为引用类型,无法直接传递nullptr + // 此用例仅作演示:若接口设计为指针类型,验证无效参数处理 + // 实际对于引用参数,可测试参数未初始化的场景(但引用必须初始化) + int32_t uninitializedVersion; // 未初始化的变量 + EXPECT_EQ(MSERR_OK, player_->GetApiVersion(uninitializedVersion)); + EXPECT_EQ(uninitializedVersion, 1); // 无论输入是否初始化,输出应正确 +} + +/** + * @tc.name : Test IsSeekContinuousSupported with supported video in prepared state + * @tc.number: Player_IsSeekContinuousSupported_001 + * @tc.desc : Test returns true when video supports SeekContinuous (prepared state) + */ +HWTEST_F(PlayerUnitTest, Player_IsSeekContinuousSupported_001, TestSize.Level0) +{ + // 使用支持连续seek的视频(如示例中的VIDEO_FILE1) + ASSERT_EQ(MSERR_OK, player_->SetSource(VIDEO_FILE1)); + sptr videoSurface = player_->GetVideoSurface(); + ASSERT_NE(nullptr, videoSurface); + EXPECT_EQ(MSERR_OK, player_->SetVideoSurface(videoSurface)); + EXPECT_EQ(MSERR_OK, player_->PrepareAsync()); + + // 验证支持连续seek时返回true + EXPECT_TRUE(player_->IsSeekContinuousSupported()); +} + +/** + * @tc.name : Test IsSeekContinuousSupported with supported video in playing state + * @tc.number: Player_IsSeekContinuousSupported_002 + * @tc.desc : Test returns true when video supports SeekContinuous (playing state) + */ +HWTEST_F(PlayerUnitTest, Player_IsSeekContinuousSupported_002, TestSize.Level0) +{ + ASSERT_EQ(MSERR_OK, player_->SetSource(VIDEO_FILE1)); + sptr videoSurface = player_->GetVideoSurface(); + ASSERT_NE(nullptr, videoSurface); + EXPECT_EQ(MSERR_OK, player_->SetVideoSurface(videoSurface)); + EXPECT_EQ(MSERR_OK, player_->PrepareAsync()); + EXPECT_EQ(MSERR_OK, player_->Play()); + sleep(PLAYING_TIME_2_SEC); + + // 播放中验证支持状态 + EXPECT_TRUE(player_->IsSeekContinuousSupported()); + +} + +/** + * @tc.name : Test IsSeekContinuousSupported with supported mkv video + * @tc.number: Player_IsSeekContinuousSupported_003 + * @tc.desc : Test returns true for mkv video that supports SeekContinuous + */ +HWTEST_F(PlayerUnitTest, Player_IsSeekContinuousSupported_003, TestSize.Level0) +{ + // 参考示例中对mkv格式的测试(VIDEO_FILE3) + ASSERT_EQ(MSERR_OK, player_->SetSource(VIDEO_FILE3)); + sptr videoSurface = player_->GetVideoSurface(); + ASSERT_NE(nullptr, videoSurface); + EXPECT_EQ(MSERR_OK, player_->SetVideoSurface(videoSurface)); + EXPECT_EQ(MSERR_OK, player_->PrepareAsync()); + + EXPECT_TRUE(player_->IsSeekContinuousSupported()); +} + +/** + * @tc.name : Test Player GetPlaybackPosition API + * @tc.number: Player_GetPlaybackPosition_001 + * @tc.desc : Test GetPlaybackPosition when player is playing + */ +HWTEST_F(PlayerUnitTest, Player_GetPlaybackPosition_001, TestSize.Level2) +{ + ASSERT_EQ(MSERR_OK, player_->SetSource(VIDEO_FILE1)); + sptr videoSurface = player_->GetVideoSurface(); + ASSERT_NE(nullptr, videoSurface); + EXPECT_EQ(MSERR_OK, player_->SetVideoSurface(videoSurface)); + EXPECT_EQ(MSERR_OK, player_->PrepareAsync()); + EXPECT_EQ(MSERR_OK, player_->Play()); + EXPECT_TRUE(player_->IsPlaying()); + + int32_t position = -1; + EXPECT_EQ(MSERR_OK, player_->GetPlaybackPosition(position)); + EXPECT_GE(position, 0); // 播放中位置应大于等于0 + + EXPECT_EQ(MSERR_OK, player_->Stop()); +} + +/** + * @tc.name : Test Player GetPlaybackPosition API + * @tc.number: Player_GetPlaybackPosition_002 + * @tc.desc : Test GetPlaybackPosition when player is paused + */ +HWTEST_F(PlayerUnitTest, Player_GetPlaybackPosition_002, TestSize.Level2) +{ + ASSERT_EQ(MSERR_OK, player_->SetSource(VIDEO_FILE1)); + sptr videoSurface = player_->GetVideoSurface(); + ASSERT_NE(nullptr, videoSurface); + EXPECT_EQ(MSERR_OK, player_->SetVideoSurface(videoSurface)); + EXPECT_EQ(MSERR_OK, player_->Prepare()); + EXPECT_EQ(MSERR_OK, player_->Play()); + sleep(PLAYING_TIME_2_SEC); // 播放2秒后暂停 + EXPECT_EQ(MSERR_OK, player_->Pause()); + + int32_t position = -1; + EXPECT_EQ(MSERR_OK, player_->GetPlaybackPosition(position)); + EXPECT_GE(position, PLAYING_TIME_2_SEC * 1000); // 位置应不小于2秒(2000ms) + + EXPECT_EQ(MSERR_OK, player_->Stop()); +} + +/** + * @tc.name : Test Player GetPlaybackPosition API + * @tc.number: Player_GetPlaybackPosition_003 + * @tc.desc : Test GetPlaybackPosition when player is not prepared + */ +HWTEST_F(PlayerUnitTest, Player_GetPlaybackPosition_003, TestSize.Level2) +{ + ASSERT_EQ(MSERR_OK, player_->SetSource(VIDEO_FILE1)); + // 未调用Prepare/PrepareAsync,直接获取位置 + int32_t position = -1; + EXPECT_NE(MSERR_OK, player_->GetPlaybackPosition(position)); +} + +/** + * @tc.name : Test Player GetPlaybackPosition API + * @tc.number: Player_GetPlaybackPosition_004 + * @tc.desc : Test GetPlaybackPosition after seek operation + */ +HWTEST_F(PlayerUnitTest, Player_GetPlaybackPosition_004, TestSize.Level2) +{ + ASSERT_EQ(MSERR_OK, player_->SetSource(VIDEO_FILE1)); + sptr videoSurface = player_->GetVideoSurface(); + ASSERT_NE(nullptr, videoSurface); + EXPECT_EQ(MSERR_OK, player_->SetVideoSurface(videoSurface)); + EXPECT_EQ(MSERR_OK, player_->Prepare()); + + const int32_t seekTime = 5000; // 5秒 + EXPECT_EQ(MSERR_OK, player_->Seek(seekTime, SEEK_NEXT_SYNC)); + + int32_t position = -1; + EXPECT_EQ(MSERR_OK, player_->GetPlaybackPosition(position)); + EXPECT_NEAR(position, seekTime, 1000); // 允许1秒误差 + + EXPECT_EQ(MSERR_OK, player_->Stop()); +} + +/** + * @tc.name : Test Player GetPlaybackPosition API + * @tc.number: Player_GetPlaybackPosition_005 + * @tc.desc : Test GetPlaybackPosition with null source + */ +HWTEST_F(PlayerUnitTest, Player_GetPlaybackPosition_005, TestSize.Level2) +{ + // 未设置任何媒体源 + int32_t position = -1; + EXPECT_NE(MSERR_OK, player_->GetPlaybackPosition(position)); +} + } // namespace Media } // namespace OHOS -- Gitee From b456347824240e495123f679f28ccdf5c33d1b12 Mon Sep 17 00:00:00 2001 From: freemanmmmm Date: Tue, 19 Aug 2025 10:35:41 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E9=94=99?= =?UTF-8?q?=E8=AF=AF=20Signed-off-by:=20freemanmmmm=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frameworks/native/player/test/unittest/include/player_mock.h | 3 +++ .../native/player/test/unittest/src/player_unit_test.cpp | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/frameworks/native/player/test/unittest/include/player_mock.h b/frameworks/native/player/test/unittest/include/player_mock.h index 2fcaa6bcc..309147308 100644 --- a/frameworks/native/player/test/unittest/include/player_mock.h +++ b/frameworks/native/player/test/unittest/include/player_mock.h @@ -179,6 +179,9 @@ public: int32_t EnableReportMediaProgress(bool enable); void ReleaseClientListener(); int32_t EnableReportAudioInterrupt(bool enable); + int32_t GetApiVersion(int32_t &apiVersion); + bool IsSeekContinuousSupported(); + int32_t GetPlaybackPosition(int32_t &playbackPosition); private: void SeekPrepare(int32_t &mseconds, PlayerSeekMode &mode); std::shared_ptr player_ = nullptr; diff --git a/frameworks/native/player/test/unittest/src/player_unit_test.cpp b/frameworks/native/player/test/unittest/src/player_unit_test.cpp index b3e2f0068..a78e897ba 100644 --- a/frameworks/native/player/test/unittest/src/player_unit_test.cpp +++ b/frameworks/native/player/test/unittest/src/player_unit_test.cpp @@ -4813,7 +4813,6 @@ HWTEST_F(PlayerUnitTest, Player_IsSeekContinuousSupported_002, TestSize.Level0) // 播放中验证支持状态 EXPECT_TRUE(player_->IsSeekContinuousSupported()); - } /** -- Gitee From 2a7ccc725f556074b01a38c13f33d8c69f6e3e6e Mon Sep 17 00:00:00 2001 From: freemanmmmm Date: Tue, 19 Aug 2025 11:06:17 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86playmock.cpp=20S?= =?UTF-8?q?igned-off-by:=20freemanmmmm=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../player/test/unittest/src/player_mock.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/frameworks/native/player/test/unittest/src/player_mock.cpp b/frameworks/native/player/test/unittest/src/player_mock.cpp index 7e4706446..b0bec49b0 100644 --- a/frameworks/native/player/test/unittest/src/player_mock.cpp +++ b/frameworks/native/player/test/unittest/src/player_mock.cpp @@ -855,5 +855,22 @@ void PlayerMock::ReleaseClientListener() UNITTEST_CHECK_AND_RETURN_LOG(player_ != nullptr, "player_ == nullptr"); player_->ReleaseClientListener(); } + +bool PlayerMock::IsSeekContinuousSupported() +{ + return false; +} + +int32_t PlayerMock::GetApiVersion(int32_t &apiVersion) +{ + (void)apiVersion; + return 0; +} + +int32_t PlayerMock::GetApiVersionGetPlaybackPosition(int32_t &playbackPosition) +{ + playbackPosition = 0; + return 0; +} } // namespace Media } // namespace OHOS -- Gitee From b4c52efefc89d522e7fd199bb6710282a0e8ef66 Mon Sep 17 00:00:00 2001 From: freemanmmmm Date: Tue, 19 Aug 2025 12:34:19 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20Signed-off-by:=20freem?= =?UTF-8?q?anmmmm=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frameworks/native/player/test/unittest/src/player_mock.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/native/player/test/unittest/src/player_mock.cpp b/frameworks/native/player/test/unittest/src/player_mock.cpp index b0bec49b0..fdcd17a6a 100644 --- a/frameworks/native/player/test/unittest/src/player_mock.cpp +++ b/frameworks/native/player/test/unittest/src/player_mock.cpp @@ -867,7 +867,7 @@ int32_t PlayerMock::GetApiVersion(int32_t &apiVersion) return 0; } -int32_t PlayerMock::GetApiVersionGetPlaybackPosition(int32_t &playbackPosition) +int32_t PlayerMock::GetPlaybackPosition(int32_t &playbackPosition) { playbackPosition = 0; return 0; -- Gitee