Chromium Code Reviews| Index: talk/media/webrtc/webrtcvoiceengine_unittest.cc | 
| diff --git a/talk/media/webrtc/webrtcvoiceengine_unittest.cc b/talk/media/webrtc/webrtcvoiceengine_unittest.cc | 
| index a62bcb225fc7c6111fed44c0a43507f1ecf7b353..2da92138031d479312fbc7190020fa497f9083a4 100644 | 
| --- a/talk/media/webrtc/webrtcvoiceengine_unittest.cc | 
| +++ b/talk/media/webrtc/webrtcvoiceengine_unittest.cc | 
| @@ -72,6 +72,11 @@ class FakeVoEWrapper : public cricket::VoEWrapper { | 
| }; | 
| } // namespace | 
| +class FakeAudioSink : public rtc::RefCountedObject<webrtc::AudioSinkInterface> { | 
| 
 
the sun
2016/01/14 09:24:39
RefCountedObject not needed anymore
 
Taylor Brandstetter
2016/01/14 15:48:47
Done.
 
 | 
| + public: | 
| + void OnData(const Data& audio) override {} | 
| +}; | 
| + | 
| class WebRtcVoiceEngineTestFake : public testing::Test { | 
| public: | 
| WebRtcVoiceEngineTestFake() | 
| @@ -125,6 +130,12 @@ class WebRtcVoiceEngineTestFake : public testing::Test { | 
| return *send_stream; | 
| } | 
| + const cricket::FakeAudioReceiveStream& GetRecvStream(uint32_t ssrc) { | 
| + const auto* recv_stream = call_.GetAudioReceiveStream(ssrc); | 
| + EXPECT_TRUE(recv_stream); | 
| + return *recv_stream; | 
| + } | 
| + | 
| const webrtc::AudioSendStream::Config& GetSendStreamConfig(uint32_t ssrc) { | 
| const auto* send_stream = call_.GetAudioSendStream(ssrc); | 
| EXPECT_TRUE(send_stream); | 
| @@ -3105,6 +3116,52 @@ TEST_F(WebRtcVoiceEngineTestFake, AssociateChannelResetUponDeleteChannnel) { | 
| EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), -1); | 
| } | 
| +TEST_F(WebRtcVoiceEngineTestFake, SetRawAudioSink) { | 
| + EXPECT_TRUE(SetupEngine()); | 
| + rtc::scoped_ptr<FakeAudioSink> fake_sink_1(new FakeAudioSink()); | 
| + rtc::scoped_ptr<FakeAudioSink> fake_sink_2(new FakeAudioSink()); | 
| + | 
| + // Setting the sink before a recv stream exists should do nothing. | 
| + channel_->SetRawAudioSink(kSsrc1, std::move(fake_sink_1)); | 
| + EXPECT_TRUE( | 
| + channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc1))); | 
| + EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); | 
| + | 
| + // Now try actually setting the sink. | 
| + channel_->SetRawAudioSink(kSsrc1, std::move(fake_sink_2)); | 
| + EXPECT_NE(nullptr, GetRecvStream(kSsrc1).sink()); | 
| + | 
| + // Now try resetting it. | 
| + channel_->SetRawAudioSink(kSsrc1, nullptr); | 
| + EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); | 
| +} | 
| + | 
| +TEST_F(WebRtcVoiceEngineTestFake, SetRawAudioSinkDefaultRecvStream) { | 
| + EXPECT_TRUE(SetupEngine()); | 
| + rtc::scoped_ptr<FakeAudioSink> fake_sink_1(new FakeAudioSink()); | 
| + rtc::scoped_ptr<FakeAudioSink> fake_sink_2(new FakeAudioSink()); | 
| + | 
| + // Should be able to set a default sink even when no stream exists. | 
| + channel_->SetRawAudioSink(0, std::move(fake_sink_1)); | 
| + | 
| + // Create default channel and ensure it's assigned the default sink. | 
| + DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); | 
| + EXPECT_NE(nullptr, GetRecvStream(0x01).sink()); | 
| + | 
| + // Try resetting the default sink. | 
| + channel_->SetRawAudioSink(0, nullptr); | 
| + EXPECT_EQ(nullptr, GetRecvStream(0x01).sink()); | 
| + | 
| + // Try setting the default sink while the default stream exists. | 
| + channel_->SetRawAudioSink(0, std::move(fake_sink_2)); | 
| + EXPECT_NE(nullptr, GetRecvStream(0x01).sink()); | 
| + | 
| + // If we remove and add a default stream, it should get the same sink. | 
| + EXPECT_TRUE(channel_->RemoveRecvStream(0x01)); | 
| + DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); | 
| + EXPECT_NE(nullptr, GetRecvStream(0x01).sink()); | 
| +} | 
| + | 
| // Tests that the library initializes and shuts down properly. | 
| TEST(WebRtcVoiceEngineTest, StartupShutdown) { | 
| cricket::WebRtcVoiceEngine engine; |