Index: webrtc/api/peerconnectioninterface_unittest.cc |
diff --git a/webrtc/api/peerconnectioninterface_unittest.cc b/webrtc/api/peerconnectioninterface_unittest.cc |
index 4d5eb966f5e2607556e0f460621b860bd85826fd..24f4fd6e18402eb2bfd4ed68eff873ce4fe1c548 100644 |
--- a/webrtc/api/peerconnectioninterface_unittest.cc |
+++ b/webrtc/api/peerconnectioninterface_unittest.cc |
@@ -11,6 +11,7 @@ |
#include <string> |
#include <utility> |
+#include "testing/gmock/include/gmock/gmock.h" |
#include "webrtc/api/audiotrack.h" |
#include "webrtc/api/jsepsessiondescription.h" |
#include "webrtc/api/mediastream.h" |
@@ -240,6 +241,7 @@ static const char kSdpStringMs1Video1[] = |
using rtc::scoped_ptr; |
using rtc::scoped_refptr; |
+using ::testing::Exactly; |
using webrtc::AudioSourceInterface; |
using webrtc::AudioTrack; |
using webrtc::AudioTrackInterface; |
@@ -255,6 +257,8 @@ using webrtc::MockCreateSessionDescriptionObserver; |
using webrtc::MockDataChannelObserver; |
using webrtc::MockSetSessionDescriptionObserver; |
using webrtc::MockStatsObserver; |
+using webrtc::NotifierInterface; |
+using webrtc::ObserverInterface; |
using webrtc::PeerConnectionInterface; |
using webrtc::PeerConnectionObserver; |
using webrtc::RtpReceiverInterface; |
@@ -387,6 +391,29 @@ bool CompareStreamCollections(StreamCollectionInterface* s1, |
return true; |
} |
+// Helper class to test Observer. |
+class MockTrackObserver : public ObserverInterface { |
+ public: |
+ explicit MockTrackObserver(NotifierInterface* notifier) |
+ : notifier_(notifier) { |
+ notifier_->RegisterObserver(this); |
+ } |
+ |
+ ~MockTrackObserver() { Unregister(); } |
+ |
+ void Unregister() { |
+ if (notifier_) { |
+ notifier_->UnregisterObserver(this); |
+ notifier_ = nullptr; |
+ } |
+ } |
+ |
+ MOCK_METHOD0(OnChanged, void()); |
+ |
+ private: |
+ NotifierInterface* notifier_; |
+}; |
+ |
class MockPeerConnectionObserver : public PeerConnectionObserver { |
public: |
MockPeerConnectionObserver() : remote_streams_(StreamCollection::Create()) {} |
@@ -1843,6 +1870,8 @@ TEST_F(PeerConnectionInterfaceTest, CloseAndTestStreamsAndStates) { |
pc_->remote_streams()->at(0); |
EXPECT_EQ(MediaStreamTrackInterface::kEnded, |
remote_stream->GetVideoTracks()[0]->state()); |
+ rtc::Thread::Current()->ProcessMessages( |
+ 0); // Audio source state changes are posted. |
Taylor Brandstetter
2016/03/21 18:49:54
Why not use "EXPECT_EQ_WAIT" instead of "ProcessMe
perkj_webrtc
2016/03/22 16:59:54
Done.
|
EXPECT_EQ(MediaStreamTrackInterface::kEnded, |
remote_stream->GetAudioTracks()[0]->state()); |
} |
@@ -1949,13 +1978,28 @@ TEST_F(PeerConnectionInterfaceTest, |
EXPECT_TRUE(DoSetRemoteDescription(desc_ms1_two_tracks.release())); |
EXPECT_TRUE(CompareStreamCollections(observer_.remote_streams(), |
reference_collection_)); |
+ scoped_refptr<AudioTrackInterface> audio_track2 = |
+ observer_.remote_streams()->at(0)->GetAudioTracks()[1]; |
+ EXPECT_EQ(webrtc::MediaStreamTrackInterface::kLive, audio_track2->state()); |
+ scoped_refptr<VideoTrackInterface> video_track2 = |
+ observer_.remote_streams()->at(0)->GetVideoTracks()[1]; |
+ EXPECT_EQ(webrtc::MediaStreamTrackInterface::kLive, video_track2->state()); |
// Remove the extra audio and video tracks. |
rtc::scoped_ptr<SessionDescriptionInterface> desc_ms2 = |
CreateSessionDescriptionAndReference(1, 1); |
+ MockTrackObserver audio_track_observer(audio_track2); |
+ MockTrackObserver video_track_observer(video_track2); |
+ |
+ EXPECT_CALL(audio_track_observer, OnChanged()).Times(Exactly(1)); |
+ EXPECT_CALL(video_track_observer, OnChanged()).Times(Exactly(1)); |
EXPECT_TRUE(DoSetRemoteDescription(desc_ms2.release())); |
EXPECT_TRUE(CompareStreamCollections(observer_.remote_streams(), |
reference_collection_)); |
+ rtc::Thread::Current()->ProcessMessages( |
+ 0); // Audio source state changes are posted. |
Taylor Brandstetter
2016/03/21 18:49:54
Same here.
perkj_webrtc
2016/03/22 16:59:54
Done.
|
+ EXPECT_EQ(webrtc::MediaStreamTrackInterface::kEnded, audio_track2->state()); |
+ EXPECT_EQ(webrtc::MediaStreamTrackInterface::kEnded, video_track2->state()); |
} |
// This tests that remote tracks are ended if a local session description is set |