| Index: media/formats/webm/webm_stream_parser_unittest.cc
|
| diff --git a/media/formats/webm/webm_stream_parser_unittest.cc b/media/formats/webm/webm_stream_parser_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..0386e8fb06125cc368a1664c3764bba8c4548d19
|
| --- /dev/null
|
| +++ b/media/formats/webm/webm_stream_parser_unittest.cc
|
| @@ -0,0 +1,99 @@
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "base/bind.h"
|
| +#include "media/base/decoder_buffer.h"
|
| +#include "media/base/media_tracks.h"
|
| +#include "media/base/mock_media_log.h"
|
| +#include "media/base/test_data_util.h"
|
| +#include "media/base/text_track_config.h"
|
| +#include "media/formats/webm/webm_stream_parser.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +using testing::_;
|
| +
|
| +namespace media {
|
| +
|
| +class WebMStreamParserTest : public testing::Test {
|
| + public:
|
| + WebMStreamParserTest()
|
| + : media_log_(new testing::StrictMock<MockMediaLog>()) {}
|
| +
|
| + protected:
|
| + void ParseWebMFile(const std::string& filename) {
|
| + scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile(filename);
|
| + parser_.reset(new WebMStreamParser());
|
| + Demuxer::EncryptedMediaInitDataCB encrypted_media_init_data_cb =
|
| + base::Bind(&WebMStreamParserTest::OnEncryptedMediaInitData,
|
| + base::Unretained(this));
|
| +
|
| + EXPECT_CALL(*this, InitCB(_));
|
| + EXPECT_CALL(*this, NewMediaSegmentCB()).Times(testing::AnyNumber());
|
| + EXPECT_CALL(*this, EndMediaSegmentCB()).Times(testing::AnyNumber());
|
| + EXPECT_CALL(*this, NewBuffersCB(_, _, _))
|
| + .Times(testing::AnyNumber())
|
| + .WillRepeatedly(testing::Return(true));
|
| + parser_->Init(
|
| + base::Bind(&WebMStreamParserTest::InitCB, base::Unretained(this)),
|
| + base::Bind(&WebMStreamParserTest::NewConfigCB, base::Unretained(this)),
|
| + base::Bind(&WebMStreamParserTest::NewBuffersCB, base::Unretained(this)),
|
| + true, // ignore_text_track
|
| + encrypted_media_init_data_cb,
|
| + base::Bind(&WebMStreamParserTest::NewMediaSegmentCB,
|
| + base::Unretained(this)),
|
| + base::Bind(&WebMStreamParserTest::EndMediaSegmentCB,
|
| + base::Unretained(this)),
|
| + media_log_);
|
| + bool result = parser_->Parse(buffer->data(), buffer->data_size());
|
| + EXPECT_TRUE(result);
|
| + }
|
| +
|
| + MOCK_METHOD1(InitCB, void(const StreamParser::InitParameters& params));
|
| +
|
| + bool NewConfigCB(scoped_ptr<MediaTracks> tracks,
|
| + const StreamParser::TextTrackConfigMap& text_track_map) {
|
| + DCHECK(tracks.get());
|
| + media_tracks_ = std::move(tracks);
|
| + return true;
|
| + }
|
| +
|
| + MOCK_METHOD3(NewBuffersCB,
|
| + bool(const StreamParser::BufferQueue&,
|
| + const StreamParser::BufferQueue&,
|
| + const StreamParser::TextBufferQueueMap&));
|
| + MOCK_METHOD2(OnEncryptedMediaInitData,
|
| + void(EmeInitDataType init_data_type,
|
| + const std::vector<uint8_t>& init_data));
|
| + MOCK_METHOD0(NewMediaSegmentCB, void());
|
| + MOCK_METHOD0(EndMediaSegmentCB, void());
|
| +
|
| + scoped_refptr<testing::StrictMock<MockMediaLog>> media_log_;
|
| + scoped_ptr<WebMStreamParser> parser_;
|
| + scoped_ptr<MediaTracks> media_tracks_;
|
| +};
|
| +
|
| +TEST_F(WebMStreamParserTest, VerifyMediaTrackMetadata) {
|
| + EXPECT_MEDIA_LOG(testing::HasSubstr("Estimating WebM block duration"))
|
| + .Times(testing::AnyNumber());
|
| + ParseWebMFile("bear.webm");
|
| + EXPECT_NE(media_tracks_.get(), nullptr);
|
| +
|
| + EXPECT_EQ(media_tracks_->tracks().size(), 2u);
|
| +
|
| + const MediaTrack& video_track = *(media_tracks_->tracks()[0]);
|
| + EXPECT_EQ(video_track.type(), MediaTrack::Video);
|
| + EXPECT_EQ(video_track.id(), "1");
|
| + EXPECT_EQ(video_track.kind(), "main");
|
| + EXPECT_EQ(video_track.label(), "");
|
| + EXPECT_EQ(video_track.language(), "und");
|
| +
|
| + const MediaTrack& audio_track = *(media_tracks_->tracks()[1]);
|
| + EXPECT_EQ(audio_track.type(), MediaTrack::Audio);
|
| + EXPECT_EQ(audio_track.id(), "2");
|
| + EXPECT_EQ(audio_track.kind(), "main");
|
| + EXPECT_EQ(audio_track.label(), "");
|
| + EXPECT_EQ(audio_track.language(), "und");
|
| +}
|
| +
|
| +} // namespace media
|
|
|