Chromium Code Reviews| Index: webrtc/modules/audio_coding/codecs/red/audio_encoder_copy_red_unittest.cc |
| diff --git a/webrtc/modules/audio_coding/codecs/red/audio_encoder_copy_red_unittest.cc b/webrtc/modules/audio_coding/codecs/red/audio_encoder_copy_red_unittest.cc |
| index a194fb98aa427f4806d5a7d2c570f92b99fbc014..74b3f300876632d5153db5811f122d49b3c51f9b 100644 |
| --- a/webrtc/modules/audio_coding/codecs/red/audio_encoder_copy_red_unittest.cc |
| +++ b/webrtc/modules/audio_coding/codecs/red/audio_encoder_copy_red_unittest.cc |
| @@ -47,7 +47,6 @@ class AudioEncoderCopyRedTest : public ::testing::Test { |
| .WillRepeatedly(Return(sample_rate_hz_)); |
| EXPECT_CALL(mock_encoder_, MaxEncodedBytes()) |
| .WillRepeatedly(Return(kMockMaxEncodedBytes)); |
| - encoded_.resize(red_->MaxEncodedBytes(), 0); |
| } |
| void TearDown() override { |
| @@ -60,10 +59,11 @@ class AudioEncoderCopyRedTest : public ::testing::Test { |
| void Encode() { |
| ASSERT_TRUE(red_.get() != NULL); |
| + encoded_.Clear(); |
| encoded_info_ = red_->Encode( |
| timestamp_, |
| rtc::ArrayView<const int16_t>(audio_, num_audio_samples_10ms), |
| - encoded_.size(), &encoded_[0]); |
| + &encoded_); |
| timestamp_ += num_audio_samples_10ms; |
| } |
| @@ -73,34 +73,11 @@ class AudioEncoderCopyRedTest : public ::testing::Test { |
| int16_t audio_[kMaxNumSamples]; |
| const int sample_rate_hz_; |
| size_t num_audio_samples_10ms; |
| - std::vector<uint8_t> encoded_; |
| + rtc::Buffer encoded_; |
| AudioEncoder::EncodedInfo encoded_info_; |
| const int red_payload_type_; |
| }; |
| -class MockEncodeHelper { |
| - public: |
| - MockEncodeHelper() : write_payload_(false), payload_(NULL) { |
| - memset(&info_, 0, sizeof(info_)); |
| - } |
| - |
| - AudioEncoder::EncodedInfo Encode(uint32_t timestamp, |
| - rtc::ArrayView<const int16_t> audio, |
| - size_t max_encoded_bytes, |
| - uint8_t* encoded) { |
| - if (write_payload_) { |
| - RTC_CHECK(encoded); |
| - RTC_CHECK_LE(info_.encoded_bytes, max_encoded_bytes); |
| - memcpy(encoded, payload_, info_.encoded_bytes); |
| - } |
| - return info_; |
| - } |
| - |
| - AudioEncoder::EncodedInfo info_; |
| - bool write_payload_; |
| - uint8_t* payload_; |
| -}; |
| - |
| TEST_F(AudioEncoderCopyRedTest, CreateAndDestroy) { |
| } |
| @@ -143,7 +120,7 @@ TEST_F(AudioEncoderCopyRedTest, CheckImmediateEncode) { |
| InSequence s; |
| MockFunction<void(int check_point_id)> check; |
| for (int i = 1; i <= 6; ++i) { |
| - EXPECT_CALL(mock_encoder_, EncodeInternal(_, _, _, _)) |
| + EXPECT_CALL(mock_encoder_, EncodeInternal(_, _, _)) |
| .WillRepeatedly(Return(AudioEncoder::EncodedInfo())); |
| EXPECT_CALL(check, Call(i)); |
| Encode(); |
| @@ -154,12 +131,16 @@ TEST_F(AudioEncoderCopyRedTest, CheckImmediateEncode) { |
| // Checks that no output is produced if the underlying codec doesn't emit any |
| // new data, even if the RED codec is loaded with a secondary encoding. |
| TEST_F(AudioEncoderCopyRedTest, CheckNoOutput) { |
| - // Start with one Encode() call that will produce output. |
| static const size_t kEncodedSize = 17; |
| - AudioEncoder::EncodedInfo info; |
| - info.encoded_bytes = kEncodedSize; |
| - EXPECT_CALL(mock_encoder_, EncodeInternal(_, _, _, _)) |
| - .WillOnce(Return(info)); |
| + { |
| + InSequence s; |
| + EXPECT_CALL(mock_encoder_, EncodeInternal(_, _, _)) |
| + .WillOnce(Invoke(MockAudioEncoder::FakeEncoding(kEncodedSize))) |
|
hlundin-webrtc
2016/02/29 12:46:47
I like the new mock helpers! :)
ossu
2016/02/29 13:23:01
Hooray! \o_o/
|
| + .WillOnce(Invoke(MockAudioEncoder::FakeEncoding(0))) |
| + .WillOnce(Invoke(MockAudioEncoder::FakeEncoding(kEncodedSize))); |
| + } |
| + |
| + // Start with one Encode() call that will produce output. |
| Encode(); |
| // First call is a special case, since it does not include a secondary |
| // payload. |
| @@ -167,16 +148,10 @@ TEST_F(AudioEncoderCopyRedTest, CheckNoOutput) { |
| EXPECT_EQ(kEncodedSize, encoded_info_.encoded_bytes); |
| // Next call to the speech encoder will not produce any output. |
| - info.encoded_bytes = 0; |
| - EXPECT_CALL(mock_encoder_, EncodeInternal(_, _, _, _)) |
| - .WillOnce(Return(info)); |
| Encode(); |
| EXPECT_EQ(0u, encoded_info_.encoded_bytes); |
| // Final call to the speech encoder will produce output. |
| - info.encoded_bytes = kEncodedSize; |
| - EXPECT_CALL(mock_encoder_, EncodeInternal(_, _, _, _)) |
| - .WillOnce(Return(info)); |
| Encode(); |
| EXPECT_EQ(2 * kEncodedSize, encoded_info_.encoded_bytes); |
| ASSERT_EQ(2u, encoded_info_.redundant.size()); |
| @@ -190,10 +165,8 @@ TEST_F(AudioEncoderCopyRedTest, CheckPayloadSizes) { |
| static const int kNumPackets = 10; |
| InSequence s; |
| for (int encode_size = 1; encode_size <= kNumPackets; ++encode_size) { |
| - AudioEncoder::EncodedInfo info; |
| - info.encoded_bytes = encode_size; |
| - EXPECT_CALL(mock_encoder_, EncodeInternal(_, _, _, _)) |
| - .WillOnce(Return(info)); |
| + EXPECT_CALL(mock_encoder_, EncodeInternal(_, _, _)) |
| + .WillOnce(Invoke(MockAudioEncoder::FakeEncoding(encode_size))); |
| } |
| // First call is a special case, since it does not include a secondary |
| @@ -213,13 +186,13 @@ TEST_F(AudioEncoderCopyRedTest, CheckPayloadSizes) { |
| // Checks that the correct timestamps are returned. |
| TEST_F(AudioEncoderCopyRedTest, CheckTimestamps) { |
| - MockEncodeHelper helper; |
| - |
| - helper.info_.encoded_bytes = 17; |
| - helper.info_.encoded_timestamp = timestamp_; |
| uint32_t primary_timestamp = timestamp_; |
| - EXPECT_CALL(mock_encoder_, EncodeInternal(_, _, _, _)) |
| - .WillRepeatedly(Invoke(&helper, &MockEncodeHelper::Encode)); |
| + AudioEncoder::EncodedInfo info; |
| + info.encoded_bytes = 17; |
| + info.encoded_timestamp = timestamp_; |
| + |
| + EXPECT_CALL(mock_encoder_, EncodeInternal(_, _, _)) |
| + .WillOnce(Invoke(MockAudioEncoder::FakeEncoding(info))); |
| // First call is a special case, since it does not include a secondary |
| // payload. |
| @@ -228,7 +201,10 @@ TEST_F(AudioEncoderCopyRedTest, CheckTimestamps) { |
| uint32_t secondary_timestamp = primary_timestamp; |
| primary_timestamp = timestamp_; |
| - helper.info_.encoded_timestamp = timestamp_; |
| + info.encoded_timestamp = timestamp_; |
| + EXPECT_CALL(mock_encoder_, EncodeInternal(_, _, _)) |
| + .WillOnce(Invoke(MockAudioEncoder::FakeEncoding(info))); |
| + |
| Encode(); |
| ASSERT_EQ(2u, encoded_info_.redundant.size()); |
| EXPECT_EQ(primary_timestamp, encoded_info_.redundant[0].encoded_timestamp); |
| @@ -240,30 +216,26 @@ TEST_F(AudioEncoderCopyRedTest, CheckTimestamps) { |
| TEST_F(AudioEncoderCopyRedTest, CheckPayloads) { |
| // Let the mock encoder write payloads with increasing values. The first |
| // payload will have values 0, 1, 2, ..., kPayloadLenBytes - 1. |
| - MockEncodeHelper helper; |
| static const size_t kPayloadLenBytes = 5; |
| - helper.info_.encoded_bytes = kPayloadLenBytes; |
| - helper.write_payload_ = true; |
| uint8_t payload[kPayloadLenBytes]; |
| for (uint8_t i = 0; i < kPayloadLenBytes; ++i) { |
| payload[i] = i; |
| } |
| - helper.payload_ = payload; |
| - EXPECT_CALL(mock_encoder_, EncodeInternal(_, _, _, _)) |
| - .WillRepeatedly(Invoke(&helper, &MockEncodeHelper::Encode)); |
| + EXPECT_CALL(mock_encoder_, EncodeInternal(_, _, _)) |
| + .WillRepeatedly(Invoke(MockAudioEncoder::CopyEncoding(payload))); |
| // First call is a special case, since it does not include a secondary |
| // payload. |
| Encode(); |
| EXPECT_EQ(kPayloadLenBytes, encoded_info_.encoded_bytes); |
| for (size_t i = 0; i < kPayloadLenBytes; ++i) { |
| - EXPECT_EQ(i, encoded_[i]); |
| + EXPECT_EQ(i, encoded_.data()[i]); |
| } |
| for (int j = 0; j < 5; ++j) { |
| // Increment all values of the payload by 10. |
| for (size_t i = 0; i < kPayloadLenBytes; ++i) |
| - helper.payload_[i] += 10; |
| + payload[i] += 10; |
| Encode(); |
| ASSERT_EQ(2u, encoded_info_.redundant.size()); |
| @@ -271,9 +243,9 @@ TEST_F(AudioEncoderCopyRedTest, CheckPayloads) { |
| EXPECT_EQ(kPayloadLenBytes, encoded_info_.redundant[1].encoded_bytes); |
| for (size_t i = 0; i < kPayloadLenBytes; ++i) { |
| // Check primary payload. |
| - EXPECT_EQ((j + 1) * 10 + i, encoded_[i]); |
| + EXPECT_EQ((j + 1) * 10 + i, encoded_.data()[i]); |
| // Check secondary payload. |
| - EXPECT_EQ(j * 10 + i, encoded_[i + kPayloadLenBytes]); |
| + EXPECT_EQ(j * 10 + i, encoded_.data()[i + kPayloadLenBytes]); |
| } |
| } |
| } |
| @@ -281,13 +253,12 @@ TEST_F(AudioEncoderCopyRedTest, CheckPayloads) { |
| // Checks correct propagation of payload type. |
| // Checks that the correct timestamps are returned. |
| TEST_F(AudioEncoderCopyRedTest, CheckPayloadType) { |
| - MockEncodeHelper helper; |
| - |
| - helper.info_.encoded_bytes = 17; |
| const int primary_payload_type = red_payload_type_ + 1; |
| - helper.info_.payload_type = primary_payload_type; |
| - EXPECT_CALL(mock_encoder_, EncodeInternal(_, _, _, _)) |
| - .WillRepeatedly(Invoke(&helper, &MockEncodeHelper::Encode)); |
| + AudioEncoder::EncodedInfo info; |
| + info.encoded_bytes = 17; |
| + info.payload_type = primary_payload_type; |
| + EXPECT_CALL(mock_encoder_, EncodeInternal(_, _, _)) |
| + .WillOnce(Invoke(MockAudioEncoder::FakeEncoding(info))); |
| // First call is a special case, since it does not include a secondary |
| // payload. |
| @@ -297,7 +268,10 @@ TEST_F(AudioEncoderCopyRedTest, CheckPayloadType) { |
| EXPECT_EQ(red_payload_type_, encoded_info_.payload_type); |
| const int secondary_payload_type = red_payload_type_ + 2; |
| - helper.info_.payload_type = secondary_payload_type; |
| + info.payload_type = secondary_payload_type; |
| + EXPECT_CALL(mock_encoder_, EncodeInternal(_, _, _)) |
| + .WillOnce(Invoke(MockAudioEncoder::FakeEncoding(info))); |
| + |
| Encode(); |
| ASSERT_EQ(2u, encoded_info_.redundant.size()); |
| EXPECT_EQ(secondary_payload_type, encoded_info_.redundant[0].payload_type); |