diff options
author | penghuang@chromium.org <penghuang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-22 07:42:07 +0000 |
---|---|---|
committer | penghuang@chromium.org <penghuang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-22 07:42:07 +0000 |
commit | 44a58da899d969a1f255838090c51c90e57e3f72 (patch) | |
tree | 6b9d89f55d5b61f3b1c26821dde9967471d5e255 /ppapi/tests | |
parent | 2be6a21ff8333f0e63d9104e344bea11064461b2 (diff) | |
download | chromium_src-44a58da899d969a1f255838090c51c90e57e3f72.zip chromium_src-44a58da899d969a1f255838090c51c90e57e3f72.tar.gz chromium_src-44a58da899d969a1f255838090c51c90e57e3f72.tar.bz2 |
[PPAPI][MediaStream] Add browser tests for MediaStreamAudioTrack
BUG=330851
Review URL: https://codereview.chromium.org/175383003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@252755 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/tests')
-rw-r--r-- | ppapi/tests/test_media_stream_audio_track.cc | 123 | ||||
-rw-r--r-- | ppapi/tests/test_media_stream_audio_track.h | 35 |
2 files changed, 158 insertions, 0 deletions
diff --git a/ppapi/tests/test_media_stream_audio_track.cc b/ppapi/tests/test_media_stream_audio_track.cc new file mode 100644 index 0000000..a1b57ff --- /dev/null +++ b/ppapi/tests/test_media_stream_audio_track.cc @@ -0,0 +1,123 @@ +// Copyright 2014 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. +// +// Tests PPB_MediaStreamAudioTrack interface. + +#include "ppapi/tests/test_media_stream_audio_track.h" + +#include "ppapi/c/private/ppb_testing_private.h" +#include "ppapi/cpp/audio_buffer.h" +#include "ppapi/cpp/completion_callback.h" +#include "ppapi/cpp/instance.h" +#include "ppapi/cpp/var.h" +#include "ppapi/tests/test_utils.h" +#include "ppapi/tests/testing_instance.h" + +REGISTER_TEST_CASE(MediaStreamAudioTrack); + +namespace { + +const int32_t kTimes = 3; +const char kJSCode[] = + "function gotStream(stream) {" + " test_stream = stream;" + " var track = stream.getAudioTracks()[0];" + " var plugin = document.getElementById('plugin');" + " plugin.postMessage(track);" + "}" + "var constraints = {" + " audio: true," + " video: false," + "};" + "navigator.getUserMedia = " + " navigator.getUserMedia || navigator.webkitGetUserMedia;" + "navigator.getUserMedia(constraints," + " gotStream, function() {});"; +} + +TestMediaStreamAudioTrack::TestMediaStreamAudioTrack(TestingInstance* instance) + : TestCase(instance), + event_(instance_->pp_instance()) { +} + +bool TestMediaStreamAudioTrack::Init() { + return true; +} + +TestMediaStreamAudioTrack::~TestMediaStreamAudioTrack() { +} + +void TestMediaStreamAudioTrack::RunTests(const std::string& filter) { + RUN_TEST(Create, filter); + RUN_TEST(GetBuffer, filter); +} + +void TestMediaStreamAudioTrack::HandleMessage(const pp::Var& message) { + if (message.is_resource()) { + audio_track_ = pp::MediaStreamAudioTrack(message.AsResource()); + } + event_.Signal(); +} + +std::string TestMediaStreamAudioTrack::TestCreate() { + // Create a track. + instance_->EvalScript(kJSCode); + event_.Wait(); + event_.Reset(); + + ASSERT_FALSE(audio_track_.is_null()); + ASSERT_FALSE(audio_track_.HasEnded()); + ASSERT_FALSE(audio_track_.GetId().empty()); + + // Close the track. + audio_track_.Close(); + ASSERT_TRUE(audio_track_.HasEnded()); + audio_track_ = pp::MediaStreamAudioTrack(); + PASS(); +} + +std::string TestMediaStreamAudioTrack::TestGetBuffer() { + // Create a track. + instance_->EvalScript(kJSCode); + event_.Wait(); + event_.Reset(); + + ASSERT_FALSE(audio_track_.is_null()); + ASSERT_FALSE(audio_track_.HasEnded()); + ASSERT_FALSE(audio_track_.GetId().empty()); + + PP_TimeDelta timestamp = 0.0; + + // Get |kTimes| buffers. + for (int i = 0; i < kTimes; ++i) { + TestCompletionCallbackWithOutput<pp::AudioBuffer> cc( + instance_->pp_instance(), false); + cc.WaitForResult(audio_track_.GetBuffer(cc.GetCallback())); + ASSERT_EQ(PP_OK, cc.result()); + pp::AudioBuffer buffer = cc.output(); + ASSERT_FALSE(buffer.is_null()); + ASSERT_EQ(buffer.GetSampleRate(), PP_AUDIOBUFFER_SAMPLERATE_44100); + ASSERT_EQ(buffer.GetSampleSize(), PP_AUDIOBUFFER_SAMPLESIZE_16_BITS); + + ASSERT_GE(buffer.GetTimestamp(), timestamp); + timestamp = buffer.GetTimestamp(); + + ASSERT_GT(buffer.GetDataBufferSize(), 0U); + ASSERT_TRUE(buffer.GetDataBuffer() != NULL); + + audio_track_.RecycleBuffer(buffer); + + // A recycled buffer should be invalidated. + ASSERT_EQ(buffer.GetSampleRate(), PP_AUDIOBUFFER_SAMPLERATE_UNKNOWN); + ASSERT_EQ(buffer.GetSampleSize(), PP_AUDIOBUFFER_SAMPLESIZE_UNKNOWN); + ASSERT_EQ(buffer.GetDataBufferSize(), 0U); + ASSERT_TRUE(buffer.GetDataBuffer() == NULL); + } + + // Close the track. + audio_track_.Close(); + ASSERT_TRUE(audio_track_.HasEnded()); + audio_track_ = pp::MediaStreamAudioTrack(); + PASS(); +} diff --git a/ppapi/tests/test_media_stream_audio_track.h b/ppapi/tests/test_media_stream_audio_track.h new file mode 100644 index 0000000..f9ea526 --- /dev/null +++ b/ppapi/tests/test_media_stream_audio_track.h @@ -0,0 +1,35 @@ +// Copyright 2014 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. + +#ifndef PAPPI_TESTS_TEST_MEDIA_STREAM_AUDIO_TRACK_H_ +#define PAPPI_TESTS_TEST_MEDIA_STREAM_AUDIO_TRACK_H_ + +#include <string> + +#include "ppapi/cpp/media_stream_audio_track.h" +#include "ppapi/cpp/video_frame.h" +#include "ppapi/tests/test_case.h" + +class TestMediaStreamAudioTrack : public TestCase { + public: + explicit TestMediaStreamAudioTrack(TestingInstance* instance); + virtual ~TestMediaStreamAudioTrack(); + + private: + // TestCase implementation. + virtual bool Init(); + virtual void RunTests(const std::string& filter); + + // Overrides. + virtual void HandleMessage(const pp::Var& message_data); + + std::string TestCreate(); + std::string TestGetBuffer(); + + pp::MediaStreamAudioTrack audio_track_; + + NestedEvent event_; +}; + +#endif // PAPPI_TESTS_TEST_MEDIA_STREAM_AUDIO_TRACK_H_ |