1 /* 2 * Copyright (C) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 #include <queue> 16 #include "gtest/gtest.h" 17 #include "filter/filter.h" 18 #include "media_sync_manager.h" 19 20 #include "video_sink.h" 21 #include "media_synchronous_sink.h" 22 23 using namespace testing::ext; 24 25 namespace OHOS { 26 namespace Media { 27 namespace Test { 28 using namespace Pipeline; 29 class TestSyncManager : public testing::Test { 30 public: 31 // SetUpTestCase: Called before all test cases SetUpTestCase(void)32 static void SetUpTestCase(void) { } 33 // TearDownTestCase: Called after all test case TearDownTestCase(void)34 static void TearDownTestCase(void) { } 35 // SetUp: Called before each test cases SetUp(void)36 void SetUp(void) 37 { 38 syncManager_ = std::make_shared<MediaSyncManager>(); 39 ASSERT_TRUE(syncManager_ != nullptr); 40 } 41 // TearDown: Called after each test cases TearDown(void)42 void TearDown(void) 43 { 44 syncManager_ = nullptr; 45 } 46 public: 47 std::shared_ptr<MediaSyncManager> syncManager_ = nullptr; 48 }; 49 50 HWTEST_F(TestSyncManager, sync_manager_set, TestSize.Level1) 51 { 52 float rate = 0; 53 auto setPlaybackRateStatus = syncManager_->SetPlaybackRate(rate); 54 ASSERT_EQ(setPlaybackRateStatus, Status::OK); 55 } 56 57 HWTEST_F(TestSyncManager, sync_manager_get, TestSize.Level1) 58 { 59 auto rateBack = syncManager_->GetPlaybackRate(); 60 ASSERT_EQ(rateBack, 1); 61 } 62 63 HWTEST_F(TestSyncManager, sync_manager_life_cycle, TestSize.Level1) 64 { 65 // Resume 66 auto resumeStatus = syncManager_->Resume(); 67 ASSERT_EQ(resumeStatus, Status::OK); 68 69 // Pause 70 auto pauseStatus = syncManager_->Pause(); 71 ASSERT_EQ(pauseStatus, Status::OK); 72 73 // Seek 74 int64_t seekTime = 0; 75 auto seekStatus = syncManager_->Seek(seekTime); 76 ASSERT_NE(seekStatus, Status::OK); 77 78 // Reset 79 auto resetStatus = syncManager_->Reset(); 80 ASSERT_EQ(resetStatus, Status::OK); 81 82 // IsSeeking 83 auto isSeeking = syncManager_->InSeeking(); 84 ASSERT_EQ(isSeeking, false); 85 } 86 87 HWTEST_F(TestSyncManager, sync_manager_update_time_without_synchronizer, TestSize.Level1) 88 { 89 // AddSynchronizer 90 VideoSink sync; 91 syncManager_->AddSynchronizer(&sync); 92 // RemoveSynchronizer 93 syncManager_->RemoveSynchronizer(&sync); 94 // UpdateTimeAnchor 95 auto updateTimeStatus = syncManager_->UpdateTimeAnchor(-1, -1, -1, -1, -1, nullptr); 96 ASSERT_EQ(updateTimeStatus, true); 97 updateTimeStatus = syncManager_->UpdateTimeAnchor(1, -1, -1, -1, -1, nullptr); 98 ASSERT_EQ(updateTimeStatus, true); 99 updateTimeStatus = syncManager_->UpdateTimeAnchor(1, 1, -1, -1, -1, nullptr); 100 ASSERT_EQ(updateTimeStatus, true); 101 updateTimeStatus = syncManager_->UpdateTimeAnchor(1, 1, 1, -1, -1, nullptr); 102 ASSERT_EQ(updateTimeStatus, true); 103 updateTimeStatus = syncManager_->UpdateTimeAnchor(1, 1, 1, 1, -1, nullptr); 104 ASSERT_EQ(updateTimeStatus, true); 105 updateTimeStatus = syncManager_->UpdateTimeAnchor(1, 1, 1, 1, 1, nullptr); 106 ASSERT_EQ(updateTimeStatus, true); 107 updateTimeStatus = syncManager_->UpdateTimeAnchor(1, 1, 1, 1, 1, &sync); 108 ASSERT_EQ(updateTimeStatus, true); 109 } 110 111 HWTEST_F(TestSyncManager, sync_manager_life_func, TestSize.Level1) 112 { 113 // AddSynchronizer 114 VideoSink sync; 115 syncManager_->AddSynchronizer(&sync); 116 // UpdateTimeAnchor 117 auto updateTimeStatus = syncManager_->UpdateTimeAnchor(-1, -1, -1, -1, -1, nullptr); 118 ASSERT_EQ(updateTimeStatus, true); 119 updateTimeStatus = syncManager_->UpdateTimeAnchor(1, -1, -1, -1, -1, nullptr); 120 ASSERT_EQ(updateTimeStatus, true); 121 updateTimeStatus = syncManager_->UpdateTimeAnchor(1, 1, -1, -1, -1, nullptr); 122 ASSERT_EQ(updateTimeStatus, true); 123 updateTimeStatus = syncManager_->UpdateTimeAnchor(1, 1, 1, -1, -1, nullptr); 124 ASSERT_EQ(updateTimeStatus, true); 125 updateTimeStatus = syncManager_->UpdateTimeAnchor(1, 1, 1, 1, -1, nullptr); 126 ASSERT_EQ(updateTimeStatus, true); 127 updateTimeStatus = syncManager_->UpdateTimeAnchor(1, 1, 1, 1, 1, nullptr); 128 ASSERT_EQ(updateTimeStatus, true); 129 updateTimeStatus = syncManager_->UpdateTimeAnchor(1, 1, 1, 1, 1, &sync); 130 ASSERT_EQ(updateTimeStatus, true); 131 132 // GetMediaTimeNow 133 auto mediaTimeNow = syncManager_->GetMediaTimeNow(); 134 ASSERT_EQ(mediaTimeNow, 0); 135 136 // GetClockTimeNow 137 auto clockTimeNow = syncManager_->GetMediaTimeNow(); 138 ASSERT_EQ(clockTimeNow, 0); 139 140 // GetClockTime 141 auto clockTime = syncManager_->GetClockTime(0); 142 ASSERT_NE(clockTime, 0); 143 144 // Report 145 syncManager_->ReportPrerolled(&sync); 146 syncManager_->ReportEos(&sync); 147 syncManager_->SetMediaTimeRangeEnd(0, 0, &sync); 148 syncManager_->SetMediaTimeRangeStart(0, 0, &sync); 149 150 // GetSeekTime 151 int64_t seekTime = syncManager_->GetSeekTime(); 152 ASSERT_NE(seekTime, 0); 153 } 154 155 // Scenario1: Test when syncer is nullptr then AddSynchronizer does nothing. 156 HWTEST_F(TestSyncManager, AddSynchronizer_ShouldDoNothing_WhenSyncerIsNull, TestSize.Level0) 157 { 158 IMediaSynchronizer* syncer = nullptr; 159 syncManager_->AddSynchronizer(syncer); 160 // No exception should be thrown and no action should be performed. 161 } 162 163 // Scenario2: Test when syncer is not nullptr and not already in syncers_ then AddSynchronizer adds the syncer. 164 HWTEST_F(TestSyncManager, AddSynchronizer_ShouldAddSyncer_WhenSyncerIsNotNullAndNotInSyncers, TestSize.Level0) 165 { 166 IMediaSynchronizer* syncer = new VideoSink(); 167 syncManager_->AddSynchronizer(syncer); 168 EXPECT_EQ(syncManager_->syncers_.size(), 1); 169 EXPECT_EQ(syncManager_->syncers_[0], syncer); 170 delete syncer; 171 } 172 173 // Scenario3: Test when syncer is not nullptr and already in syncers_ then AddSynchronizer does nothing. 174 HWTEST_F(TestSyncManager, AddSynchronizer_ShouldDoNothing_WhenSyncerIsNotNullAndInSyncers, TestSize.Level0) 175 { 176 IMediaSynchronizer* syncer = new VideoSink(); 177 syncManager_->AddSynchronizer(syncer); 178 syncManager_->AddSynchronizer(syncer); 179 EXPECT_EQ(syncManager_->syncers_.size(), 1); 180 delete syncer; 181 } 182 183 // Scenario1: Test when syncer is nullptr then RemoveSynchronizer does nothing. 184 HWTEST_F(TestSyncManager, RemoveSynchronizer_ShouldDoNothing_WhenSyncerIsNull, TestSize.Level0) 185 { 186 IMediaSynchronizer* syncer = nullptr; 187 syncManager_->RemoveSynchronizer(syncer); 188 // No exception should be thrown and nothing should change in syncManager 189 } 190 191 // Scenario2: Test when syncer is not nullptr then RemoveSynchronizer removes the syncer from syncManager. 192 HWTEST_F(TestSyncManager, RemoveSynchronizer_ShouldRemoveSyncer_WhenSyncerIsNotNull, TestSize.Level0) 193 { 194 IMediaSynchronizer* syncer = new VideoSink(); 195 IMediaSynchronizer* syncerOne = new VideoSink(); 196 syncManager_->AddSynchronizer(syncer); 197 syncManager_->RemoveSynchronizer(syncerOne); 198 EXPECT_EQ(syncManager_->syncers_.size(), 1); 199 syncManager_->RemoveSynchronizer(syncer); 200 EXPECT_EQ(syncManager_->syncers_.size(), 0); 201 delete syncer; 202 delete syncerOne; 203 } 204 205 // Scenario1: Test case for rate less than 0 206 HWTEST_F(TestSyncManager, SetPlaybackRate_ShouldReturnError_WhenRateLessThan0, TestSize.Level0) { 207 float rate = -1.0; 208 EXPECT_EQ(syncManager_->SetPlaybackRate(rate), Status::ERROR_INVALID_PARAMETER); 209 } 210 211 // Scenario2: Test case for rate equal to 0 212 HWTEST_F(TestSyncManager, SetPlaybackRate_ShouldReturnOk_WhenRateEqualTo0, TestSize.Level0) { 213 float rate = 0.0; 214 EXPECT_EQ(syncManager_->SetPlaybackRate(rate), Status::OK); 215 } 216 217 // Scenario3: Test case for rate greater than 0 and currentAbsMediaTime_ is HST_TIME_NONE 218 HWTEST_F(TestSyncManager, 219 SetPlaybackRate_ShouldReturnOk_WhenRateGreaterThan0AndCurrentAbsMediaTimeIsNone, TestSize.Level0) { 220 float rate = 1.0; 221 syncManager_->currentAbsMediaTime_ = HST_TIME_NONE; 222 EXPECT_EQ(syncManager_->SetPlaybackRate(rate), Status::OK); 223 } 224 225 // Scenario4: Test case for rate greater than 0 and currentAbsMediaTime_ is not HST_TIME_NONE 226 HWTEST_F(TestSyncManager, 227 SetPlaybackRate_ShouldReturnOk_WhenRateGreaterThan0AndCurrentAbsMediaTimeIsNotNone, TestSize.Level0) { 228 float rate = 1.0; 229 syncManager_->currentAbsMediaTime_ = 100; 230 EXPECT_EQ(syncManager_->SetPlaybackRate(rate), Status::OK); 231 } 232 233 // Scenario1: Test when inTime is less than minRangeStartOfMediaTime_ 234 HWTEST_F(TestSyncManager, ClipMediaTime_ShouldClipToMin_WhenInTimeLessThanMin, TestSize.Level0) 235 { 236 syncManager_->minRangeStartOfMediaTime_ = 100; 237 syncManager_->maxRangeEndOfMediaTime_ = 200; 238 int64_t inTime = 50; 239 int64_t expected = 100; 240 int64_t result = syncManager_->ClipMediaTime(inTime); 241 ASSERT_EQ(expected, result); 242 } 243 244 // Scenario2: Test when inTime is more than maxRangeEndOfMediaTime_ 245 HWTEST_F(TestSyncManager, ClipMediaTime_ShouldClipToMax_WhenInTimeMoreThanMax, TestSize.Level0) 246 { 247 syncManager_->minRangeStartOfMediaTime_ = 100; 248 syncManager_->maxRangeEndOfMediaTime_ = 200; 249 int64_t inTime = 250; 250 int64_t expected = 200; 251 int64_t result = syncManager_->ClipMediaTime(inTime); 252 ASSERT_EQ(expected, result); 253 } 254 255 // Scenario3: Test when inTime is between minRangeStartOfMediaTime_ and maxRangeEndOfMediaTime_ 256 HWTEST_F(TestSyncManager, ClipMediaTime_ShouldNotClip_WhenInTimeBetweenMinAndMax, TestSize.Level0) 257 { 258 syncManager_->minRangeStartOfMediaTime_ = 100; 259 syncManager_->maxRangeEndOfMediaTime_ = 200; 260 int64_t inTime = 150; 261 int64_t expected = 150; 262 int64_t result = syncManager_->ClipMediaTime(inTime); 263 ASSERT_EQ(expected, result); 264 } 265 266 // Scenario4: Test when inTime is equal to minRangeStartOfMediaTime_ 267 HWTEST_F(TestSyncManager, ClipMediaTime_ShouldNotClip_WhenInTimeEqualToMin, TestSize.Level0) 268 { 269 syncManager_->minRangeStartOfMediaTime_ = 100; 270 syncManager_->maxRangeEndOfMediaTime_ = 200; 271 int64_t inTime = 100; 272 int64_t expected = 100; 273 int64_t result = syncManager_->ClipMediaTime(inTime); 274 ASSERT_EQ(expected, result); 275 } 276 277 // Scenario5: Test when inTime is equal to maxRangeEndOfMediaTime_ 278 HWTEST_F(TestSyncManager, ClipMediaTime_ShouldNotClip_WhenInTimeEqualToMax, TestSize.Level0) 279 { 280 syncManager_->minRangeStartOfMediaTime_ = 100; 281 syncManager_->maxRangeEndOfMediaTime_ = 200; 282 int64_t inTime = 200; 283 int64_t expected = 200; 284 int64_t result = syncManager_->ClipMediaTime(inTime); 285 ASSERT_EQ(expected, result); 286 } 287 288 HWTEST_F(TestSyncManager, UpdateFirstPtsAfterSeek_ShouldUpdateFirstPts_WhenFirstPtsIsNone, TestSize.Level0) 289 { 290 int64_t mediaTime = 100; 291 syncManager_->UpdateFirstPtsAfterSeek(mediaTime); 292 EXPECT_EQ(syncManager_->firstMediaTimeAfterSeek_, mediaTime); 293 } 294 295 HWTEST_F(TestSyncManager, UpdateFirstPtsAfterSeek_ShouldUpdateFirstPts_WhenMediaTimeIsGreater, TestSize.Level0) 296 { 297 int64_t firstMediaTimeAfterSeek = 50; 298 int64_t mediaTime = 100; 299 syncManager_->firstMediaTimeAfterSeek_ = firstMediaTimeAfterSeek; 300 syncManager_->UpdateFirstPtsAfterSeek(mediaTime); 301 EXPECT_EQ(syncManager_->firstMediaTimeAfterSeek_, mediaTime); 302 } 303 304 HWTEST_F(TestSyncManager, UpdateFirstPtsAfterSeek_ShouldNotUpdateFirstPts_WhenMediaTimeIsLess, TestSize.Level0) 305 { 306 int64_t firstMediaTimeAfterSeek = 150; 307 int64_t mediaTime = 100; 308 syncManager_->firstMediaTimeAfterSeek_ = firstMediaTimeAfterSeek; 309 syncManager_->UpdateFirstPtsAfterSeek(mediaTime); 310 EXPECT_EQ(syncManager_->firstMediaTimeAfterSeek_, firstMediaTimeAfterSeek); 311 } 312 313 // Scenario1: Test when playRate is 0 then return HST_TIME_NONE. 314 HWTEST_F(TestSyncManager, SimpleGetMediaTime_001, TestSize.Level0) 315 { 316 int64_t anchorClockTime = 100; 317 int64_t delayTime = 50; 318 int64_t nowClockTime = 150; 319 int64_t anchorMediaTime = 200; 320 float playRate = 0; 321 int64_t result = 322 syncManager_->SimpleGetMediaTime(anchorClockTime, delayTime, nowClockTime, anchorMediaTime, playRate); 323 ASSERT_EQ(result, HST_TIME_NONE); 324 } 325 326 // Scenario2: Test when any of the input parameters is HST_TIME_NONE then return HST_TIME_NONE. 327 HWTEST_F(TestSyncManager, SimpleGetMediaTime_002, TestSize.Level0) 328 { 329 int64_t anchorClockTime = HST_TIME_NONE; 330 int64_t delayTime = 50; 331 int64_t nowClockTime = 150; 332 int64_t anchorMediaTime = 200; 333 float playRate = 1.0; 334 int64_t result = 335 syncManager_->SimpleGetMediaTime(anchorClockTime, delayTime, nowClockTime, anchorMediaTime, playRate); 336 ASSERT_EQ(result, HST_TIME_NONE); 337 } 338 339 // Scenario3: Test when all parameters are valid then return anchorMediaTime. 340 HWTEST_F(TestSyncManager, SimpleGetMediaTime_003, TestSize.Level0) 341 { 342 int64_t anchorClockTime = 100; 343 int64_t delayTime = 50; 344 int64_t nowClockTime = 150; 345 int64_t anchorMediaTime = 200; 346 float playRate = 1.0; 347 int64_t result = 348 syncManager_->SimpleGetMediaTime(anchorClockTime, delayTime, nowClockTime, anchorMediaTime, playRate); 349 ASSERT_EQ(result, anchorMediaTime); 350 } 351 352 // Scenario1: Test case for when isSeeking_ is true 353 HWTEST_F(TestSyncManager, GetMediaTimeNow_001, TestSize.Level0) 354 { 355 syncManager_->isSeeking_ = true; 356 syncManager_->seekingMediaTime_ = 100; 357 EXPECT_EQ(syncManager_->GetMediaTimeNow(), 100); 358 } 359 360 // Scenario3: Test case for when SimpleGetMediaTimeExactly returns HST_TIME_NONE 361 HWTEST_F(TestSyncManager, GetMediaTimeNow_003, TestSize.Level0) 362 { 363 EXPECT_EQ(syncManager_->GetMediaTimeNow(), 0); 364 } 365 366 // Scenario1: Test case for when clockState_ is PAUSED 367 HWTEST_F(TestSyncManager, GetClockTimeNow_001, TestSize.Level0) 368 { 369 MediaSyncManager mediaSyncManager; 370 mediaSyncManager.clockState_ = MediaSyncManager::State::PAUSED; 371 mediaSyncManager.GetClockTimeNow(); 372 EXPECT_EQ(mediaSyncManager.clockState_, MediaSyncManager::State::PAUSED); 373 } 374 375 // Scenario1: Test when playRate is 0, the function should return HST_TIME_NONE. 376 HWTEST_F(TestSyncManager, SimpleGetClockTime_001, TestSize.Level0) 377 { 378 MediaSyncManager mediaSyncManager; 379 int64_t anchorClockTime = 100; 380 int64_t nowMediaTime = 200; 381 int64_t anchorMediaTime = 150; 382 float playRate = 0; 383 int64_t result = mediaSyncManager.SimpleGetClockTime(anchorClockTime, nowMediaTime, anchorMediaTime, playRate); 384 EXPECT_EQ(result, HST_TIME_NONE); 385 } 386 387 // Scenario2: Test when any of the input parameters is HST_TIME_NONE, the function should return HST_TIME_NONE. 388 HWTEST_F(TestSyncManager, SimpleGetClockTime_002, TestSize.Level0) 389 { 390 MediaSyncManager mediaSyncManager; 391 int64_t anchorClockTime = HST_TIME_NONE; 392 int64_t nowMediaTime = 200; 393 int64_t anchorMediaTime = 150; 394 float playRate = 1.0; 395 int64_t result = mediaSyncManager.SimpleGetClockTime(anchorClockTime, nowMediaTime, anchorMediaTime, playRate); 396 EXPECT_EQ(result, HST_TIME_NONE); 397 } 398 399 // Scenario3: Test when all parameters are valid, the function should return the correct clock time. 400 HWTEST_F(TestSyncManager, SimpleGetClockTime_003, TestSize.Level0) 401 { 402 MediaSyncManager mediaSyncManager; 403 int64_t anchorClockTime = 100; 404 int64_t nowMediaTime = 200; 405 int64_t anchorMediaTime = 150; 406 float playRate = 1.0; 407 int64_t result = mediaSyncManager.SimpleGetClockTime(anchorClockTime, nowMediaTime, anchorMediaTime, playRate); 408 EXPECT_EQ(result, 150); 409 } 410 411 HWTEST_F(TestSyncManager, GetClockTime_001, TestSize.Level0) 412 { 413 MediaSyncManager mediaSyncManager; 414 mediaSyncManager.minRangeStartOfMediaTime_ = 100; 415 mediaSyncManager.maxRangeEndOfMediaTime_ = 200; 416 int64_t mediaTime = 50; 417 int64_t result = mediaSyncManager.GetClockTime(mediaTime); 418 EXPECT_EQ(result, HST_TIME_NONE); 419 } 420 421 // Scenario2: Test when mediaTime is greater than maxRangeEndOfMediaTime_ 422 HWTEST_F(TestSyncManager, GetClockTime_002, TestSize.Level0) 423 { 424 MediaSyncManager mediaSyncManager; 425 mediaSyncManager.minRangeStartOfMediaTime_ = 100; 426 mediaSyncManager.maxRangeEndOfMediaTime_ = 200; 427 int64_t mediaTime = 250; 428 int64_t result = mediaSyncManager.GetClockTime(mediaTime); 429 EXPECT_EQ(result, HST_TIME_NONE); 430 } 431 432 // Scenario3: Test when mediaTime is within the range 433 HWTEST_F(TestSyncManager, GetClockTime_003, TestSize.Level0) 434 { 435 MediaSyncManager mediaSyncManager; 436 mediaSyncManager.minRangeStartOfMediaTime_ = 100; 437 mediaSyncManager.maxRangeEndOfMediaTime_ = 200; 438 int64_t mediaTime = 150; 439 int64_t result = mediaSyncManager.GetClockTime(mediaTime); 440 EXPECT_EQ(result, HST_TIME_NONE); 441 } 442 443 // Scenario1: Test when supplier is nullptr then ReportPrerolled returns immediately. 444 HWTEST_F(TestSyncManager, ReportPrerolled_001, TestSize.Level0) 445 { 446 syncManager_->ReportPrerolled(nullptr); 447 // No further action is expected, as the function should return immediately. 448 } 449 450 // Scenario2: Test when allSyncerShouldPrerolled_ is false then ReportPrerolled returns immediately. 451 HWTEST_F(TestSyncManager, ReportPrerolled_002, TestSize.Level0) 452 { 453 IMediaSynchronizer* supplier = new VideoSink(); 454 syncManager_->allSyncerShouldPrerolled_ = false; 455 syncManager_->ReportPrerolled(supplier); 456 // No further action is expected, as the function should return immediately. 457 delete supplier; 458 } 459 460 // Scenario3: Test when supplier is already in prerolledSyncers_ then ReportPrerolled returns immediately. 461 HWTEST_F(TestSyncManager, ReportPrerolled_003, TestSize.Level0) 462 { 463 IMediaSynchronizer* supplier = new VideoSink(); 464 syncManager_->allSyncerShouldPrerolled_ = true; 465 syncManager_->prerolledSyncers_.emplace_back(supplier); 466 syncManager_->ReportPrerolled(supplier); 467 // No further action is expected, as the function should return immediately. 468 delete supplier; 469 } 470 471 HWTEST_F(TestSyncManager, ReportPrerolled_004, TestSize.Level0) 472 { 473 IMediaSynchronizer* supplier = new VideoSink(); 474 syncManager_->allSyncerShouldPrerolled_ = true; 475 syncManager_->ReportPrerolled(supplier); 476 EXPECT_EQ(syncManager_->prerolledSyncers_.size(), 1); 477 EXPECT_EQ(syncManager_->prerolledSyncers_.front(), supplier); 478 delete supplier; 479 } 480 481 // Scenario5: Test when all prerolledSyncers_ are equal to syncers_ then all prerolledSyncers_ are notified and cleared. 482 HWTEST_F(TestSyncManager, ReportPrerolled_005, TestSize.Level0) 483 { 484 IMediaSynchronizer* supplier = new VideoSink(); 485 syncManager_->allSyncerShouldPrerolled_ = true; 486 syncManager_->syncers_.emplace_back(supplier); 487 syncManager_->ReportPrerolled(supplier); 488 EXPECT_EQ(syncManager_->prerolledSyncers_.size(), 0); 489 EXPECT_EQ(syncManager_->prerolledSyncers_.size(), 0); 490 delete supplier; 491 } 492 } // namespace Test 493 } // namespace Media 494 } // namespace OHOS