mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-08 12:56:23 +03:00
5f1dbbaaa6
This removes a lot of duplicated stream creation code from the plugins, and also simplifies the way that the appropriate plugin is found. This mirrors the ImageDecoderPlugin design and necessitates new sniffing methods on the loaders.
59 lines
2.7 KiB
C++
59 lines
2.7 KiB
C++
/*
|
|
* Copyright (c) 2022, kleines Filmröllchen <filmroellchen@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#include <AK/LexicalPath.h>
|
|
#include <LibAudio/FlacLoader.h>
|
|
#include <LibCore/Directory.h>
|
|
#include <LibTest/TestCase.h>
|
|
|
|
struct DiscoverFLACTestsHack {
|
|
DiscoverFLACTestsHack()
|
|
{
|
|
// FIXME: Also run (our own) tests in this directory.
|
|
(void)Core::Directory::for_each_entry("./FLAC/SpecTests"sv, Core::DirIterator::Flags::SkipParentAndBaseDir, [](auto const& entry, auto const& directory) -> ErrorOr<IterationDecision> {
|
|
auto path = LexicalPath::join(directory.path().string(), entry.name);
|
|
if (path.extension() == "flac"sv) {
|
|
Test::add_test_case_to_suite(adopt_ref(*new ::Test::TestCase(
|
|
DeprecatedString::formatted("flac_spec_test_{}", path.basename()),
|
|
[path = move(path)]() {
|
|
auto file = Core::File::open(path.string(), Core::File::OpenMode::Read);
|
|
if (file.is_error()) {
|
|
FAIL(DeprecatedString::formatted("{}", file.error()));
|
|
return;
|
|
}
|
|
auto buffered_file = Core::InputBufferedFile::create(file.release_value());
|
|
if (buffered_file.is_error()) {
|
|
FAIL(DeprecatedString::formatted("{}", buffered_file.error()));
|
|
return;
|
|
}
|
|
auto result = Audio::FlacLoaderPlugin::create(buffered_file.release_value());
|
|
if (result.is_error()) {
|
|
FAIL(DeprecatedString::formatted("{}", result.error()));
|
|
return;
|
|
}
|
|
|
|
auto loader = result.release_value();
|
|
|
|
while (true) {
|
|
auto maybe_samples = loader->load_chunks(2 * MiB);
|
|
if (maybe_samples.is_error()) {
|
|
FAIL(DeprecatedString::formatted("{}", maybe_samples.error()));
|
|
return;
|
|
}
|
|
maybe_samples.value().remove_all_matching([](auto& chunk) { return chunk.is_empty(); });
|
|
if (maybe_samples.value().is_empty())
|
|
return;
|
|
}
|
|
},
|
|
false)));
|
|
}
|
|
return IterationDecision::Continue;
|
|
});
|
|
}
|
|
};
|
|
// 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;
|