diff --git a/frameworks/native/player/test/unittest/include/player_mock.h b/frameworks/native/player/test/unittest/include/player_mock.h index 2fcaa6bccea165ee60f9bf125e46be13802b18aa..9aa345e59236b7bd2e7ef5b47138272ac1f20c1e 100644 --- a/frameworks/native/player/test/unittest/include/player_mock.h +++ b/frameworks/native/player/test/unittest/include/player_mock.h @@ -179,6 +179,8 @@ public: int32_t EnableReportMediaProgress(bool enable); void ReleaseClientListener(); int32_t EnableReportAudioInterrupt(bool enable); + int32_t SetPlayRangeWithMode(int64_t start, int64_t end, PlayerSeekMode mode = SEEK_PREVIOUS_SYNC); + int32_t SetPlayRangeUsWithMode(int64_t start, int64_t end, PlayerSeekMode mode = SEEK_PREVIOUS_SYNC); private: void SeekPrepare(int32_t &mseconds, PlayerSeekMode &mode); std::shared_ptr player_ = nullptr; diff --git a/frameworks/native/player/test/unittest/src/player_mock.cpp b/frameworks/native/player/test/unittest/src/player_mock.cpp index 7e4706446160980c402d6891079b979935e69c31..b05e97798a24dc77e546944d28b02866613a0a3a 100644 --- a/frameworks/native/player/test/unittest/src/player_mock.cpp +++ b/frameworks/native/player/test/unittest/src/player_mock.cpp @@ -855,5 +855,21 @@ void PlayerMock::ReleaseClientListener() UNITTEST_CHECK_AND_RETURN_LOG(player_ != nullptr, "player_ == nullptr"); player_->ReleaseClientListener(); } + +int32_t PlayerMock::SetPlayRangeWithMode(int64_t start, int64_t end, PlayerSeekMode mode = SEEK_PREVIOUS_SYNC) +{ + (void)start; + (void)end; + (void)mode; + return 0; +} + +int32_t PlayerMock::SetPlayRangeUsWithMode(int64_t start, int64_t end, PlayerSeekMode mode = SEEK_PREVIOUS_SYNC) +{ + (void)start; + (void)end; + (void)mode; + return 0; +} } // namespace Media } // namespace OHOS 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 e8a75c839c16c38fac3a2a23a43abfd621849c04..a0004f895d858a4428c0f51e13f51318522c727e 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,201 @@ HWTEST_F(PlayerUnitTest, Player_EnableReportMediaProgress_004, TestSize.Level0) ASSERT_EQ(MSERR_OK, player_->EnableReportMediaProgress(true)); EXPECT_EQ(MSERR_OK, player_->Play()); } + +/** + * @tc.name : Test SetPlayRangeWithMode [0, 600] SEEK_PREVIOUS_SYNC + * @tc.number: Player_SetPlayRangeWithMode_001 + * @tc.desc : Test Player SetPlayRangeWithMode interface with valid range and mode + */ +HWTEST_F(PlayerUnitTest, Player_SetPlayRangeWithMode_001, TestSize.Level0) +{ + int32_t duration = 0; + ASSERT_EQ(MSERR_OK, player_->SetSource(VIDEO_FILE1)); + sptr videoSurface = player_->GetVideoSurface(); + ASSERT_NE(nullptr, videoSurface); + EXPECT_EQ(MSERR_OK, player_->SetVideoSurface(videoSurface)); + + // 首次设置范围:[0, 600],使用默认模式SEEK_PREVIOUS_SYNC + EXPECT_EQ(MSERR_OK, player_->SetPlayRangeWithMode(0, 600)); + EXPECT_EQ(MSERR_OK, player_->PrepareAsync()); + EXPECT_EQ(MSERR_OK, player_->GetDuration(duration)); + EXPECT_EQ(MSERR_OK, player_->Play()); + EXPECT_TRUE(player_->IsPlaying()); + EXPECT_EQ(MSERR_OK, player_->Pause()); + + // 调整范围:[0, duration],使用支持的SEEK_CLOSEST模式 + EXPECT_EQ(MSERR_OK, player_->SetPlayRangeWithMode(0, duration, SEEK_CLOSEST)); + EXPECT_EQ(MSERR_OK, player_->Play()); + EXPECT_TRUE(player_->IsPlaying()); + EXPECT_EQ(MSERR_OK, player_->Pause()); +} + +/** + * @tc.name : Test SetPlayRangeWithMode [1000, 5000] SEEK_CLOSEST + * @tc.number: Player_SetPlayRangeWithMode_002 + * @tc.desc : Test Player SetPlayRangeWithMode in playing state + */ +HWTEST_F(PlayerUnitTest, Player_SetPlayRangeWithMode_002, TestSize.Level0) +{ + int32_t duration = 0; + 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_->GetDuration(duration)); + EXPECT_EQ(MSERR_OK, player_->Play()); + EXPECT_TRUE(player_->IsPlaying()); + EXPECT_EQ(MSERR_OK, player_->Pause()); + + // 在暂停状态下设置范围,使用SEEK_CLOSEST模式 + EXPECT_EQ(MSERR_OK, player_->SetPlayRangeWithMode(1000, 5000, SEEK_CLOSEST)); + EXPECT_EQ(MSERR_OK, player_->Play()); + EXPECT_TRUE(player_->IsPlaying()); + EXPECT_EQ(MSERR_OK, player_->Pause()); +} + +/** + * @tc.name : Test SetPlayRangeWithMode [-2, -1] SEEK_PREVIOUS_SYNC + * @tc.number: Player_SetPlayRangeWithMode_003 + * @tc.desc : Test Player SetPlayRangeWithMode with negative range + */ +HWTEST_F(PlayerUnitTest, Player_SetPlayRangeWithMode_003, 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)); + + // 测试负数值范围 + ASSERT_NE(MSERR_OK, player_->SetPlayRangeWithMode(-2, -1, SEEK_PREVIOUS_SYNC)); +} + +/** + * @tc.name : Test SetPlayRangeWithMode [100, 20] SEEK_CLOSEST + * @tc.number: Player_SetPlayRangeWithMode_004 + * @tc.desc : Test Player SetPlayRangeWithMode with start > end + */ +HWTEST_F(PlayerUnitTest, Player_SetPlayRangeWithMode_004, 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)); + + // 测试起始时间大于结束时间 + ASSERT_NE(MSERR_OK, player_->SetPlayRangeWithMode(100, 20, SEEK_CLOSEST)); +} + +/** + * @tc.name : Test SetPlayRangeWithMode [0, 600] SEEK_NEXT_SYNC + * @tc.number: Player_SetPlayRangeWithMode_005 + * @tc.desc : Test Player SetPlayRangeWithMode with unsupported mode + */ +HWTEST_F(PlayerUnitTest, Player_SetPlayRangeWithMode_005, 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)); + + // 测试不支持的SEEK_NEXT_SYNC模式 + ASSERT_NE(MSERR_OK, player_->SetPlayRangeWithMode(0, 600, SEEK_NEXT_SYNC)); +} + +/** + * @tc.name : Test SetPlayRangeWithMode [duration+1, duration+2] + * @tc.number: Player_SetPlayRangeWithMode_006 + * @tc.desc : Test Player SetPlayRangeWithMode beyond media duration + */ +HWTEST_F(PlayerUnitTest, Player_SetPlayRangeWithMode_006, TestSize.Level0) +{ + int32_t duration = 0; + 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_->GetDuration(duration)); + EXPECT_EQ(MSERR_OK, player_->Play()); + EXPECT_TRUE(player_->IsPlaying()); + EXPECT_EQ(MSERR_OK, player_->Pause()); + + // 测试范围超出媒体总时长 + int32_t start = duration + 1; + int32_t end = duration + 2; + ASSERT_NE(MSERR_OK, player_->SetPlayRangeWithMode(start, end, SEEK_PREVIOUS_SYNC)); +} + +/** + * @tc.name : Test SetPlayRangeWithMode before SetSource + * @tc.number: Player_SetPlayRangeWithMode_007 + * @tc.desc : Test Player SetPlayRangeWithMode without SetSource + */ +HWTEST_F(PlayerUnitTest, Player_SetPlayRangeWithMode_007, TestSize.Level0) +{ + sptr videoSurface = player_->GetVideoSurface(); + ASSERT_NE(nullptr, videoSurface); + EXPECT_EQ(MSERR_OK, player_->SetVideoSurface(videoSurface)); + + // 测试未设置媒体源时调用接口 + ASSERT_NE(MSERR_OK, player_->SetPlayRangeWithMode(0, 600, SEEK_PREVIOUS_SYNC)); +} + +/** + * @tc.name : Test SetPlayRangeUsWithMode [0, 600000] SEEK_PREVIOUS_SYNC + * @tc.number: Player_SetPlayRangeUsWithMode_001 + * @tc.desc : Test Player SetPlayRangeUsWithMode interface with valid range and default mode + */ +HWTEST_F(PlayerUnitTest, Player_SetPlayRangeUsWithMode_001, TestSize.Level0) +{ + int32_t duration = 0; // 单位:毫秒,需转换为微秒使用 + ASSERT_EQ(MSERR_OK, player_->SetSource(VIDEO_FILE1)); + sptr videoSurface = player_->GetVideoSurface(); + ASSERT_NE(nullptr, videoSurface); + EXPECT_EQ(MSERR_OK, player_->SetVideoSurface(videoSurface)); + + // 首次设置范围:[0微秒, 600000微秒(600毫秒)],使用默认模式SEEK_PREVIOUS_SYNC + EXPECT_EQ(MSERR_OK, player_->SetPlayRangeUsWithMode(0, 600000)); + EXPECT_EQ(MSERR_OK, player_->PrepareAsync()); + EXPECT_EQ(MSERR_OK, player_->GetDuration(duration)); // 获取总时长(毫秒) + int64_t durationUs = static_cast(duration) * 1000; // 转换为微秒 + EXPECT_EQ(MSERR_OK, player_->Play()); + EXPECT_TRUE(player_->IsPlaying()); + EXPECT_EQ(MSERR_OK, player_->Pause()); + + // 调整范围:[0微秒, 总时长微秒],使用支持的SEEK_CLOSEST模式 + EXPECT_EQ(MSERR_OK, player_->SetPlayRangeUsWithMode(0, durationUs, SEEK_CLOSEST)); + EXPECT_EQ(MSERR_OK, player_->Play()); + EXPECT_TRUE(player_->IsPlaying()); + EXPECT_EQ(MSERR_OK, player_->Pause()); +} + +/** + * @tc.name : Test SetPlayRangeUsWithMode [1000000, 5000000] SEEK_CLOSEST + * @tc.number: Player_SetPlayRangeUsWithMode_002 + * @tc.desc : Test Player SetPlayRangeUsWithMode in paused state + */ +HWTEST_F(PlayerUnitTest, Player_SetPlayRangeUsWithMode_002, TestSize.Level0) +{ + int32_t duration = 0; + 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_->GetDuration(duration)); + EXPECT_EQ(MSERR_OK, player_->Play()); + EXPECT_TRUE(player_->IsPlaying()); + EXPECT_EQ(MSERR_OK, player_->Pause()); + + // 在暂停状态下设置范围:[1000000微秒(1秒), 5000000微秒(5秒)],使用SEEK_CLOSEST模式 + EXPECT_EQ(MSERR_OK, player_->SetPlayRangeUsWithMode(1000000, 5000000, SEEK_CLOSEST)); + EXPECT_EQ(MSERR_OK, player_->Play()); + EXPECT_TRUE(player_->IsPlaying()); + EXPECT_EQ(MSERR_OK, player_->Pause()); +} } // namespace Media } // namespace OHOS