ladybird/Tests/LibAudio/TestFLACSpec.cpp
Ali Mohammad Pur f96a3c002a Everywhere: Stop shoving things into ::std and mentioning them as such
Note that this still keeps the old behaviour of putting things in std by
default on serenity so the tools can be happy, but if USING_AK_GLOBALLY
is unset, AK behaves like a good citizen and doesn't try to put things
in the ::std namespace.

std::nothrow_t and its friends get to stay because I'm being told that
compilers assume things about them and I can't yeet them into a
different namespace...for now.
2022-12-14 11:44:32 +01:00

61 lines
1.9 KiB
C++

/*
* Copyright (c) 2022, kleines Filmröllchen <filmroellchen@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <AK/LexicalPath.h>
#include <AK/Types.h>
#include <LibAudio/FlacLoader.h>
#include <LibCore/DirIterator.h>
#include <LibCore/Stream.h>
#include <LibTest/TestCase.h>
struct FlacTest : Test::TestCase {
FlacTest(LexicalPath path)
: Test::TestCase(
DeprecatedString::formatted("flac_spec_test_{}", path.basename()), [this]() { run(); }, false)
, m_path(move(path))
{
}
void run() const
{
auto result = Audio::FlacLoaderPlugin::try_create(m_path.string());
if (result.is_error()) {
FAIL(DeprecatedString::formatted("{} (at {})", result.error().description, result.error().index));
return;
}
auto loader = result.release_value();
while (true) {
auto maybe_samples = loader->get_more_samples(2 * MiB);
if (maybe_samples.is_error()) {
FAIL(DeprecatedString::formatted("{} (at {})", maybe_samples.error().description, maybe_samples.error().index));
return;
}
if (maybe_samples.value().is_empty())
return;
}
}
LexicalPath m_path;
};
struct DiscoverFLACTestsHack {
DiscoverFLACTestsHack()
{
// FIXME: Also run (our own) tests in this directory.
auto test_iterator = Core::DirIterator { "./SpecTests", Core::DirIterator::Flags::SkipParentAndBaseDir };
while (test_iterator.has_next()) {
auto file = LexicalPath { test_iterator.next_full_path() };
if (file.extension() == "flac"sv) {
Test::add_test_case_to_suite(make_ref_counted<FlacTest>(move(file)));
}
}
}
};
// Hack taken from TEST_CASE; the above constructor will run as part of global initialization before the tests are actually executed
static struct DiscoverFLACTestsHack hack;