blob: 9281751813613f6c48587be2c7be3608e4854e4a [file] [log] [blame]
// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <lib/gtest/real_loop_fixture.h>
#include <iostream>
#include "garnet/bin/mediaplayer/test/fakes/fake_audio_renderer.h"
#include "garnet/bin/mediaplayer/test/fakes/fake_wav_reader.h"
#include "lib/component/cpp/environment_services_helper.h"
#include "lib/fxl/logging.h"
namespace media_player {
namespace test {
static constexpr uint32_t kFramesPerSecond = 48000; // 48kHz
// Base class for mediaplayer tests.
class MediaPlayerTestUnattended : public gtest::RealLoopFixture {
protected:
void SetUp() override {
environment_services_ = component::GetEnvironmentServices();
environment_services_->ConnectToService(player_.NewRequest());
player_.set_error_handler([this]() {
FXL_LOG(ERROR) << "Player connection closed.";
player_connection_closed_ = true;
QuitLoop();
});
}
void TearDown() override { EXPECT_FALSE(player_connection_closed_); }
std::shared_ptr<component::Services> environment_services_;
fuchsia::mediaplayer::PlayerPtr player_;
bool player_connection_closed_ = false;
FakeWavReader fake_reader_;
FakeAudioRenderer fake_audio_renderer_;
};
// Play a synthetic WAV file from beginning to end.
TEST_F(MediaPlayerTestUnattended, PlayWav) {
player_.events().OnStatusChanged =
[this](fuchsia::mediaplayer::PlayerStatus status) {
if (status.end_of_stream) {
EXPECT_TRUE(status.ready);
EXPECT_TRUE(fake_audio_renderer_.expected());
QuitLoop();
}
};
fake_audio_renderer_.SetPtsUnits(kFramesPerSecond, 1);
fake_audio_renderer_.ExpectPackets({{0, 4096, 0x20c39d1e31991800},
{1024, 4096, 0xeaf137125d313800},
{2048, 4096, 0x6162095671991800},
{3072, 4096, 0x36e551c7dd41f800},
{4096, 4096, 0x23dcbf6fb1991800},
{5120, 4096, 0xee0a5963dd313800},
{6144, 4096, 0x647b2ba7f1991800},
{7168, 4096, 0x39fe74195d41f800},
{8192, 4096, 0xb3de76b931991800},
{9216, 4096, 0x7e0c10ad5d313800},
{10240, 4096, 0xf47ce2f171991800},
{11264, 4096, 0xca002b62dd41f800},
{12288, 4096, 0xb6f7990ab1991800},
{13312, 4096, 0x812532fedd313800},
{14336, 4096, 0xf7960542f1991800},
{15360, 4052, 0x7308a9824acbd5ea}});
fuchsia::mediaplayer::SeekingReaderPtr fake_reader_ptr;
fidl::InterfaceRequest<fuchsia::mediaplayer::SeekingReader> reader_request =
fake_reader_ptr.NewRequest();
fake_reader_.Bind(std::move(reader_request));
fuchsia::media::AudioRendererPtr fake_audio_renderer_ptr;
fake_audio_renderer_.Bind(fake_audio_renderer_ptr.NewRequest());
player_->SetAudioRenderer(std::move(fake_audio_renderer_ptr));
player_->SetReaderSource(std::move(fake_reader_ptr));
player_->Play();
EXPECT_FALSE(RunLoopWithTimeout(zx::duration(ZX_SEC(10))));
}
} // namespace test
} // namespace media_player