Web MIDI: MidiManager crashes if a session is ended while initializing
[chromium-blink-merge.git] / ppapi / tests / test_audio_config.cc
blob279852f70cca452fedbb7bb2278fc23b0c1796c5
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "ppapi/tests/test_audio_config.h"
7 #include "ppapi/c/ppb_audio_config.h"
8 #include "ppapi/cpp/module.h"
9 #include "ppapi/tests/testing_instance.h"
11 REGISTER_TEST_CASE(AudioConfig);
13 bool TestAudioConfig::Init() {
14 audio_config_interface_ = static_cast<const PPB_AudioConfig*>(
15 pp::Module::Get()->GetBrowserInterface(PPB_AUDIO_CONFIG_INTERFACE));
16 core_interface_ = static_cast<const PPB_Core*>(
17 pp::Module::Get()->GetBrowserInterface(PPB_CORE_INTERFACE));
18 return audio_config_interface_ && core_interface_;
21 void TestAudioConfig::RunTests(const std::string& filter) {
22 RUN_TEST(RecommendSampleRate, filter);
23 RUN_TEST(ValidConfigs, filter);
24 RUN_TEST(InvalidConfigs, filter);
27 std::string TestAudioConfig::TestRecommendSampleRate() {
28 // Ask PPB_AudioConfig about the recommended sample rate.
29 PP_AudioSampleRate sample_rate = audio_config_interface_->RecommendSampleRate(
30 instance_->pp_instance());
31 ASSERT_TRUE(sample_rate == PP_AUDIOSAMPLERATE_NONE ||
32 sample_rate == PP_AUDIOSAMPLERATE_44100 ||
33 sample_rate == PP_AUDIOSAMPLERATE_48000);
35 PASS();
38 std::string TestAudioConfig::TestValidConfigs() {
39 static const PP_AudioSampleRate kSampleRates[] = {
40 PP_AUDIOSAMPLERATE_44100,
41 PP_AUDIOSAMPLERATE_48000
43 static const uint32_t kRequestFrameCounts[] = {
44 PP_AUDIOMINSAMPLEFRAMECOUNT,
45 PP_AUDIOMAXSAMPLEFRAMECOUNT,
46 // Include some "okay-looking" frame counts; check their validity below.
47 1024,
48 2048,
49 4096
52 for (size_t i = 0; i < sizeof(kSampleRates)/sizeof(kSampleRates[0]); i++) {
53 PP_AudioSampleRate sample_rate = kSampleRates[i];
55 for (size_t j = 0;
56 j < sizeof(kRequestFrameCounts)/sizeof(kRequestFrameCounts[0]);
57 j++) {
58 uint32_t request_frame_count = kRequestFrameCounts[j];
59 ASSERT_TRUE(request_frame_count >= PP_AUDIOMINSAMPLEFRAMECOUNT);
60 ASSERT_TRUE(request_frame_count <= PP_AUDIOMAXSAMPLEFRAMECOUNT);
62 uint32_t frame_count = audio_config_interface_->RecommendSampleFrameCount(
63 instance_->pp_instance(), sample_rate, request_frame_count);
64 ASSERT_TRUE(frame_count >= PP_AUDIOMINSAMPLEFRAMECOUNT);
65 ASSERT_TRUE(frame_count <= PP_AUDIOMAXSAMPLEFRAMECOUNT);
67 PP_Resource ac = audio_config_interface_->CreateStereo16Bit(
68 instance_->pp_instance(), sample_rate, frame_count);
69 ASSERT_TRUE(ac);
70 ASSERT_TRUE(audio_config_interface_->IsAudioConfig(ac));
71 ASSERT_EQ(sample_rate, audio_config_interface_->GetSampleRate(ac));
72 ASSERT_EQ(frame_count, audio_config_interface_->GetSampleFrameCount(ac));
74 core_interface_->ReleaseResource(ac);
78 PASS();
81 std::string TestAudioConfig::TestInvalidConfigs() {
82 // |PP_AUDIOSAMPLERATE_NONE| is not a valid rate, so this should fail.
83 PP_Resource ac = audio_config_interface_->CreateStereo16Bit(
84 instance_->pp_instance(),
85 PP_AUDIOSAMPLERATE_NONE,
86 PP_AUDIOMINSAMPLEFRAMECOUNT);
87 ASSERT_EQ(0, ac);
89 // Test invalid frame counts.
90 ASSERT_TRUE(PP_AUDIOMINSAMPLEFRAMECOUNT >= 1);
91 ac = audio_config_interface_->CreateStereo16Bit(
92 instance_->pp_instance(),
93 PP_AUDIOSAMPLERATE_44100,
94 PP_AUDIOMINSAMPLEFRAMECOUNT - 1u);
95 ASSERT_EQ(0, ac);
96 ac = audio_config_interface_->CreateStereo16Bit(
97 instance_->pp_instance(),
98 PP_AUDIOSAMPLERATE_44100,
99 PP_AUDIOMAXSAMPLEFRAMECOUNT + 1u);
100 ASSERT_EQ(0, ac);
102 // Test rest of API whose failure cases are defined.
103 ASSERT_FALSE(audio_config_interface_->IsAudioConfig(0));
104 ASSERT_EQ(PP_AUDIOSAMPLERATE_NONE, audio_config_interface_->GetSampleRate(0));
105 ASSERT_EQ(0u, audio_config_interface_->GetSampleFrameCount(0));
107 PASS();