From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- third_party/libwebrtc/pc/media_stream_unittest.cc | 153 ++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 third_party/libwebrtc/pc/media_stream_unittest.cc (limited to 'third_party/libwebrtc/pc/media_stream_unittest.cc') diff --git a/third_party/libwebrtc/pc/media_stream_unittest.cc b/third_party/libwebrtc/pc/media_stream_unittest.cc new file mode 100644 index 0000000000..f55ea203fb --- /dev/null +++ b/third_party/libwebrtc/pc/media_stream_unittest.cc @@ -0,0 +1,153 @@ +/* + * Copyright 2011 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "pc/media_stream.h" + +#include + +#include "pc/audio_track.h" +#include "pc/test/fake_video_track_source.h" +#include "pc/video_track.h" +#include "rtc_base/thread.h" +#include "test/gmock.h" +#include "test/gtest.h" + +static const char kStreamId1[] = "local_stream_1"; +static const char kVideoTrackId[] = "dummy_video_cam_1"; +static const char kAudioTrackId[] = "dummy_microphone_1"; + +using rtc::scoped_refptr; +using ::testing::Exactly; + +namespace webrtc { + +// Helper class to test Observer. +class MockObserver : public ObserverInterface { + public: + explicit MockObserver(NotifierInterface* notifier) : notifier_(notifier) { + notifier_->RegisterObserver(this); + } + + ~MockObserver() { Unregister(); } + + void Unregister() { + if (notifier_) { + notifier_->UnregisterObserver(this); + notifier_ = nullptr; + } + } + + MOCK_METHOD(void, OnChanged, (), (override)); + + private: + NotifierInterface* notifier_; +}; + +class MediaStreamTest : public ::testing::Test { + protected: + virtual void SetUp() { + stream_ = MediaStream::Create(kStreamId1); + ASSERT_TRUE(stream_.get() != NULL); + + video_track_ = VideoTrack::Create( + kVideoTrackId, FakeVideoTrackSource::Create(), rtc::Thread::Current()); + ASSERT_TRUE(video_track_.get() != NULL); + EXPECT_EQ(MediaStreamTrackInterface::kLive, video_track_->state()); + + audio_track_ = AudioTrack::Create(kAudioTrackId, nullptr); + + ASSERT_TRUE(audio_track_.get() != NULL); + EXPECT_EQ(MediaStreamTrackInterface::kLive, audio_track_->state()); + + EXPECT_TRUE(stream_->AddTrack(video_track_)); + EXPECT_FALSE(stream_->AddTrack(video_track_)); + EXPECT_TRUE(stream_->AddTrack(audio_track_)); + EXPECT_FALSE(stream_->AddTrack(audio_track_)); + } + + void ChangeTrack(MediaStreamTrackInterface* track) { + MockObserver observer(track); + + EXPECT_CALL(observer, OnChanged()).Times(Exactly(1)); + track->set_enabled(false); + EXPECT_FALSE(track->enabled()); + } + + rtc::AutoThread main_thread_; + scoped_refptr stream_; + scoped_refptr audio_track_; + scoped_refptr video_track_; +}; + +TEST_F(MediaStreamTest, GetTrackInfo) { + ASSERT_EQ(1u, stream_->GetVideoTracks().size()); + ASSERT_EQ(1u, stream_->GetAudioTracks().size()); + + // Verify the video track. + scoped_refptr video_track( + stream_->GetVideoTracks()[0]); + EXPECT_EQ(0, video_track->id().compare(kVideoTrackId)); + EXPECT_TRUE(video_track->enabled()); + + ASSERT_EQ(1u, stream_->GetVideoTracks().size()); + EXPECT_TRUE(stream_->GetVideoTracks()[0].get() == video_track.get()); + EXPECT_TRUE(stream_->FindVideoTrack(video_track->id()).get() == + video_track.get()); + video_track = stream_->GetVideoTracks()[0]; + EXPECT_EQ(0, video_track->id().compare(kVideoTrackId)); + EXPECT_TRUE(video_track->enabled()); + + // Verify the audio track. + scoped_refptr audio_track( + stream_->GetAudioTracks()[0]); + EXPECT_EQ(0, audio_track->id().compare(kAudioTrackId)); + EXPECT_TRUE(audio_track->enabled()); + ASSERT_EQ(1u, stream_->GetAudioTracks().size()); + EXPECT_TRUE(stream_->GetAudioTracks()[0].get() == audio_track.get()); + EXPECT_TRUE(stream_->FindAudioTrack(audio_track->id()).get() == + audio_track.get()); + audio_track = stream_->GetAudioTracks()[0]; + EXPECT_EQ(0, audio_track->id().compare(kAudioTrackId)); + EXPECT_TRUE(audio_track->enabled()); +} + +TEST_F(MediaStreamTest, RemoveTrack) { + MockObserver observer(stream_.get()); + + EXPECT_CALL(observer, OnChanged()).Times(Exactly(2)); + + EXPECT_TRUE(stream_->RemoveTrack(audio_track_)); + EXPECT_FALSE(stream_->RemoveTrack(audio_track_)); + EXPECT_EQ(0u, stream_->GetAudioTracks().size()); + EXPECT_EQ(0u, stream_->GetAudioTracks().size()); + + EXPECT_TRUE(stream_->RemoveTrack(video_track_)); + EXPECT_FALSE(stream_->RemoveTrack(video_track_)); + + EXPECT_EQ(0u, stream_->GetVideoTracks().size()); + EXPECT_EQ(0u, stream_->GetVideoTracks().size()); + + EXPECT_FALSE(stream_->RemoveTrack(rtc::scoped_refptr())); + EXPECT_FALSE(stream_->RemoveTrack(rtc::scoped_refptr())); +} + +TEST_F(MediaStreamTest, ChangeVideoTrack) { + scoped_refptr video_track( + stream_->GetVideoTracks()[0]); + ChangeTrack(video_track.get()); +} + +TEST_F(MediaStreamTest, ChangeAudioTrack) { + scoped_refptr audio_track( + stream_->GetAudioTracks()[0]); + ChangeTrack(audio_track.get()); +} + +} // namespace webrtc -- cgit v1.2.3