Home | History | Annotate | Download | only in tests
      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.
      4 
      5 #include "ppapi/tests/test_audio_config.h"
      6 
      7 #include "ppapi/c/ppb_audio_config.h"
      8 #include "ppapi/cpp/module.h"
      9 #include "ppapi/tests/testing_instance.h"
     10 
     11 REGISTER_TEST_CASE(AudioConfig);
     12 
     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_;
     19 }
     20 
     21 void TestAudioConfig::RunTests(const std::string& filter) {
     22   RUN_TEST(RecommendSampleRate, filter);
     23   RUN_TEST(ValidConfigs, filter);
     24   RUN_TEST(InvalidConfigs, filter);
     25 }
     26 
     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);
     34 
     35   PASS();
     36 }
     37 
     38 std::string TestAudioConfig::TestValidConfigs() {
     39   static const PP_AudioSampleRate kSampleRates[] = {
     40     PP_AUDIOSAMPLERATE_44100,
     41     PP_AUDIOSAMPLERATE_48000
     42   };
     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
     50   };
     51 
     52   for (size_t i = 0; i < sizeof(kSampleRates)/sizeof(kSampleRates[0]); i++) {
     53     PP_AudioSampleRate sample_rate = kSampleRates[i];
     54 
     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);
     61 
     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);
     66 
     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));
     73 
     74       core_interface_->ReleaseResource(ac);
     75     }
     76   }
     77 
     78   PASS();
     79 }
     80 
     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);
     88 
     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);
    101 
    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));
    106 
    107   PASS();
    108 }
    109