Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(463)

Unified Diff: media/audio/sounds/wav_audio_handler_unittest.cc

Issue 1453233002: Improve input handling for WaveAudioHandler. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Correct typo Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/audio/sounds/wav_audio_handler_unittest.cc
diff --git a/media/audio/sounds/wav_audio_handler_unittest.cc b/media/audio/sounds/wav_audio_handler_unittest.cc
index d4ec83a5838243c5df7d488a7146780a0f8d29b4..1a5c767ee2d56141f28c353514a030d5b842aa3c 100644
--- a/media/audio/sounds/wav_audio_handler_unittest.cc
+++ b/media/audio/sounds/wav_audio_handler_unittest.cc
@@ -12,10 +12,40 @@
#include "testing/gtest/include/gtest/gtest.h"
namespace media {
+namespace {
+const size_t kWavHeaderSize = 12;
+const size_t kFormatHeaderSize = 8;
+
+const size_t kChannelIndex = kWavHeaderSize + kFormatHeaderSize + 2;
+const size_t kBitsPerSampleIndex = kWavHeaderSize + kFormatHeaderSize + 14;
+const size_t kSampleRateIndex = kWavHeaderSize + kFormatHeaderSize + 4;
+
+void CheckStateIsInvalid(const WavAudioHandler& handler) {
+ EXPECT_FALSE(handler.is_valid());
+ EXPECT_EQ(base::StringPiece(), handler.data());
+ EXPECT_EQ(0u, handler.num_channels());
+ EXPECT_EQ(0u, handler.sample_rate());
+ EXPECT_EQ(0u, handler.bits_per_sample());
+ EXPECT_EQ(0u, handler.total_frames());
+
+ // CopyTo should always return false.
+ auto bus = media::AudioBus::Create(2, 1024);
+ size_t written = 0u;
+ EXPECT_FALSE(handler.CopyTo(bus.get(), 0u, &written));
+
+ // AtEnd should always return true.
+ EXPECT_TRUE(handler.AtEnd(0u));
+
+ // GetDuration should return zero duration.
+ EXPECT_EQ(base::TimeDelta(), handler.GetDuration());
+}
+
+} // namespace
TEST(WavAudioHandlerTest, SampleDataTest) {
WavAudioHandler handler(base::StringPiece(kTestAudioData,
arraysize(kTestAudioData)));
+ ASSERT_TRUE(handler.is_valid());
ASSERT_EQ(2u, handler.num_channels());
ASSERT_EQ(16u, handler.bits_per_sample());
ASSERT_EQ(48000u, handler.sample_rate());
@@ -34,4 +64,38 @@ TEST(WavAudioHandlerTest, SampleDataTest) {
ASSERT_EQ(static_cast<size_t>(handler.data().size()), bytes_written);
}
+TEST(WavAudioHandlerTest, TestZeroChannelsIsNotValid) {
+ // Read in the sample data and modify the channel field to hold |00|00|.
+ auto data = std::string(kTestAudioData, arraysize(kTestAudioData));
tommi (sloooow) - chröme 2015/11/17 20:48:39 std::string data(kTestAudioData, arraysize(kTestAu
+ data[kChannelIndex] = '\x00';
+ data[kChannelIndex + 1] = '\x00';
+ WavAudioHandler handler(base::StringPiece(data.c_str(), data.size()));
+ EXPECT_FALSE(handler.is_valid());
+ CheckStateIsInvalid(handler);
+}
+
+TEST(WavAudioHandlerTest, TestZeroBitsPerSampleIsNotValid) {
+ // Read in the sample data and modify the bits_per_sample field to hold
+ // |00|00|.
+ auto data = std::string(kTestAudioData, arraysize(kTestAudioData));
+ data[kBitsPerSampleIndex] = '\x00';
+ data[kBitsPerSampleIndex + 1] = '\x00';
+ WavAudioHandler handler(base::StringPiece(data.c_str(), data.size()));
+ EXPECT_FALSE(handler.is_valid());
+ CheckStateIsInvalid(handler);
+}
+
+TEST(WavAudioHandlerTest, TestZeroSamplesPerSecondIsNotValid) {
+ // Read in the sample data and modify the bits_per_sample field to hold
+ // |00|00|.
+ auto data = std::string(kTestAudioData, arraysize(kTestAudioData));
+ data[kSampleRateIndex] = '\x00';
+ data[kSampleRateIndex + 1] = '\x00';
+ data[kSampleRateIndex + 2] = '\x00';
+ data[kSampleRateIndex + 3] = '\x00';
+ WavAudioHandler handler(base::StringPiece(data.c_str(), data.size()));
+ EXPECT_FALSE(handler.is_valid());
+ CheckStateIsInvalid(handler);
+}
+
} // namespace media

Powered by Google App Engine
This is Rietveld 408576698