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#ifndef PAPPI_TESTS_TEST_AUDIO_H_
6#define PAPPI_TESTS_TEST_AUDIO_H_
7
8#include <string>
9
10#include "ppapi/c/ppb_audio.h"
11#include "ppapi/c/ppb_audio_config.h"
12#include "ppapi/c/ppb_core.h"
13#include "ppapi/tests/test_case.h"
14
15class TestAudio : public TestCase {
16 public:
17  explicit TestAudio(TestingInstance* instance);
18  ~TestAudio();
19
20  // TestCase implementation.
21  virtual bool Init();
22  virtual void RunTests(const std::string& filter);
23
24 private:
25  std::string TestCreation();
26  std::string TestDestroyNoStop();
27  std::string TestFailures();
28  std::string TestAudioCallback1();
29  std::string TestAudioCallback2();
30  std::string TestAudioCallback3();
31
32  // Calls |audio_callback_method_| (where |user_data| is "this").
33  static void AudioCallbackTrampoline(void* sample_buffer,
34                                      uint32_t buffer_size_in_bytes,
35                                      void* user_data);
36
37  typedef void (TestAudio::*AudioCallbackMethod)(void* sample_buffer,
38                                                 uint32_t buffer_size_in_bytes);
39
40  // Method called by |AudioCallbackTrampoline()|. Set only when the callback
41  // can't be running (before |StartPlayback()|, after |StopPlayback()| or
42  // releasing the last reference to the audio resource).
43  AudioCallbackMethod audio_callback_method_;
44
45  // An |AudioCallbackMethod| that just clears |sample_buffer|.
46  void AudioCallbackTrivial(void* sample_buffer, uint32_t buffer_size_in_bytes);
47
48  // |AudioCallbackMethod| used by |TestAudioCallbackN()|.
49  void AudioCallbackTest(void* sample_buffer, uint32_t buffer_size_in_bytes);
50
51  // Used by |TestAudioCallbackN()|.
52  NestedEvent audio_callback_event_;
53
54  bool test_done_;
55  bool callback_fired_;
56
57  // Raw C-level interfaces, set in |Init()|; do not modify them elsewhere.
58  const PPB_Audio* audio_interface_;
59  const PPB_AudioConfig* audio_config_interface_;
60  const PPB_Core* core_interface_;
61};
62
63#endif  // PAPPI_TESTS_TEST_AUDIO_H_
64