diff options
Diffstat (limited to 'media/cast/video_receiver/video_decoder_unittest.cc')
-rw-r--r-- | media/cast/video_receiver/video_decoder_unittest.cc | 52 |
1 files changed, 43 insertions, 9 deletions
diff --git a/media/cast/video_receiver/video_decoder_unittest.cc b/media/cast/video_receiver/video_decoder_unittest.cc index cb40e12752..f03b467bd3 100644 --- a/media/cast/video_receiver/video_decoder_unittest.cc +++ b/media/cast/video_receiver/video_decoder_unittest.cc @@ -2,8 +2,15 @@ // 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 "base/memory/scoped_ptr.h" +#include "base/test/simple_test_tick_clock.h" +#include "base/time/tick_clock.h" +#include "media/cast/cast_config.h" #include "media/cast/cast_defines.h" +#include "media/cast/cast_environment.h" +#include "media/cast/cast_receiver.h" +#include "media/cast/test/fake_task_runner.h" #include "media/cast/video_receiver/video_decoder.h" #include "testing/gmock/include/gmock/gmock.h" @@ -14,44 +21,71 @@ using testing::_; // Random frame size for testing. const int kFrameSize = 2345; +static const int64 kStartMillisecond = GG_INT64_C(1245); + +namespace { +class DecodeTestFrameCallback : + public base::RefCountedThreadSafe<DecodeTestFrameCallback> { + public: + DecodeTestFrameCallback() {} + + void DecodeComplete(scoped_ptr<I420VideoFrame> decoded_frame, + const base::TimeTicks& render_time) {} + protected: + virtual ~DecodeTestFrameCallback() {} + private: + friend class base::RefCountedThreadSafe<DecodeTestFrameCallback>; +}; +} // namespace class VideoDecoderTest : public ::testing::Test { protected: - VideoDecoderTest() { + VideoDecoderTest() + : task_runner_(new test::FakeTaskRunner(&testing_clock_)), + cast_environment_(new CastEnvironment(&testing_clock_, task_runner_, + task_runner_, task_runner_, task_runner_, task_runner_, + GetDefaultCastLoggingConfig())), + test_callback_(new DecodeTestFrameCallback()) { // Configure to vp8. config_.codec = kVp8; config_.use_external_decoder = false; - decoder_.reset(new VideoDecoder(config_)); + decoder_.reset(new VideoDecoder(config_, cast_environment_)); + testing_clock_.Advance( + base::TimeDelta::FromMilliseconds(kStartMillisecond)); } virtual ~VideoDecoderTest() {} scoped_ptr<VideoDecoder> decoder_; VideoReceiverConfig config_; + base::SimpleTestTickClock testing_clock_; + scoped_refptr<test::FakeTaskRunner> task_runner_; + scoped_refptr<CastEnvironment> cast_environment_; + scoped_refptr<DecodeTestFrameCallback> test_callback_; }; // TODO(pwestin): EXPECT_DEATH tests can not pass valgrind. TEST_F(VideoDecoderTest, DISABLED_SizeZero) { EncodedVideoFrame encoded_frame; - I420VideoFrame video_frame; base::TimeTicks render_time; encoded_frame.codec = kVp8; - EXPECT_DEATH( - decoder_->DecodeVideoFrame(&encoded_frame, render_time, &video_frame), - "Empty video frame"); + decoder_->DecodeVideoFrame( + &encoded_frame, render_time, + base::Bind(&DecodeTestFrameCallback::DecodeComplete, test_callback_)), + "Empty frame"); } // TODO(pwestin): EXPECT_DEATH tests can not pass valgrind. TEST_F(VideoDecoderTest, DISABLED_InvalidCodec) { EncodedVideoFrame encoded_frame; - I420VideoFrame video_frame; base::TimeTicks render_time; encoded_frame.data.assign(kFrameSize, 0); encoded_frame.codec = kExternalVideo; EXPECT_DEATH( - decoder_->DecodeVideoFrame(&encoded_frame, render_time, &video_frame), - "Invalid codec"); + decoder_->DecodeVideoFrame(&encoded_frame, render_time, base::Bind( + &DecodeTestFrameCallback::DecodeComplete, test_callback_)), + "Invalid codec"); } // TODO(pwestin): Test decoding a real frame. |