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
);
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.
52 for (size_t i
= 0; i
< sizeof(kSampleRates
)/sizeof(kSampleRates
[0]); i
++) {
53 PP_AudioSampleRate sample_rate
= kSampleRates
[i
];
56 j
< sizeof(kRequestFrameCounts
)/sizeof(kRequestFrameCounts
[0]);
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
);
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
);
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
);
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);
96 ac
= audio_config_interface_
->CreateStereo16Bit(
97 instance_
->pp_instance(),
98 PP_AUDIOSAMPLERATE_44100
,
99 PP_AUDIOMAXSAMPLEFRAMECOUNT
+ 1u);
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));