mirror of
https://github.com/steredbits/pelagia.git
synced 2026-10-18 14:01:26 +02:00
99 lines
3.8 KiB
C++
99 lines
3.8 KiB
C++
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
// Copyright (C) 2026 steredbits and Pelagia contributors
|
|
// Track labels.
|
|
|
|
#include "api/track_labels.h"
|
|
|
|
#include "test_framework.h"
|
|
#include "util/i18n.h"
|
|
|
|
namespace {
|
|
|
|
api::MediaStreamInfo stream(api::StreamKind kind, const char* codec, const char* lang) {
|
|
api::MediaStreamInfo s;
|
|
s.kind = kind;
|
|
s.codec = codec;
|
|
s.language = lang;
|
|
return s;
|
|
}
|
|
|
|
} // namespace
|
|
|
|
namespace {
|
|
|
|
// Same labels in English (default language).
|
|
void check_english() {
|
|
api::MediaStreamInfo a = stream(api::StreamKind::Audio, "eac3", "fre");
|
|
a.channels = 6;
|
|
a.channel_layout = "5.1";
|
|
CHECK_EQ(api::audio_label(a), "French · E-AC3 5.1");
|
|
a.language = "eng";
|
|
a.is_original = true;
|
|
CHECK_EQ(api::audio_label(a), "English (original) · E-AC3 5.1");
|
|
api::MediaStreamInfo stereo = stream(api::StreamKind::Audio, "aac", "jpn");
|
|
stereo.channels = 2;
|
|
CHECK_EQ(api::audio_label(stereo), "Japanese · AAC Stereo");
|
|
stereo.channels = 3;
|
|
CHECK_EQ(api::audio_label(stereo), "Japanese · AAC 3 channels");
|
|
api::MediaStreamInfo sub = stream(api::StreamKind::Subtitle, "subrip", "fre");
|
|
sub.is_forced = true;
|
|
sub.is_external = true;
|
|
CHECK_EQ(api::subtitle_label(sub), "French · SRT · forced · external");
|
|
CHECK_EQ(api::subtitle_format_name("mov_text"), "Text");
|
|
}
|
|
|
|
} // namespace
|
|
|
|
int main() {
|
|
check_english();
|
|
// The rest of the test checks the French labels.
|
|
util::ScopedLanguage french(util::Lang::Fr);
|
|
// Audio: language, format and channels.
|
|
api::MediaStreamInfo a = stream(api::StreamKind::Audio, "eac3", "fre");
|
|
a.channels = 6;
|
|
a.channel_layout = "5.1";
|
|
CHECK_EQ(api::audio_label(a), "Français · E-AC3 5.1");
|
|
a.codec = "truehd";
|
|
a.language = "eng";
|
|
a.channels = 8;
|
|
a.channel_layout = "7.1";
|
|
CHECK_EQ(api::audio_label(a), "Anglais · TrueHD 7.1");
|
|
a.is_original = true;
|
|
CHECK_EQ(api::audio_label(a), "Anglais (VO) · TrueHD 7.1");
|
|
// Stereo without a channel layout, then without any channel.
|
|
api::MediaStreamInfo stereo = stream(api::StreamKind::Audio, "aac", "jpn");
|
|
stereo.channels = 2;
|
|
CHECK_EQ(api::audio_label(stereo), "Japonais · AAC Stéréo");
|
|
stereo.channels = 0;
|
|
CHECK_EQ(api::audio_label(stereo), "Japonais · AAC");
|
|
// Track title: added if it brings something, otherwise ignored.
|
|
api::MediaStreamInfo commentary = stream(api::StreamKind::Audio, "ac3", "eng");
|
|
commentary.channels = 2;
|
|
commentary.title = "Commentaire du réalisateur";
|
|
CHECK_EQ(api::audio_label(commentary), "Anglais · AC3 Stéréo · Commentaire du réalisateur");
|
|
commentary.title = "anglais";
|
|
CHECK_EQ(api::audio_label(commentary), "Anglais · AC3 Stéréo");
|
|
// Langue absente.
|
|
CHECK_EQ(api::audio_label(stream(api::StreamKind::Audio, "dts", "")), "Langue inconnue · DTS");
|
|
|
|
// Sous-titres.
|
|
api::MediaStreamInfo s = stream(api::StreamKind::Subtitle, "subrip", "fre");
|
|
CHECK_EQ(api::subtitle_label(s), "Français · SRT");
|
|
s.is_forced = true;
|
|
CHECK_EQ(api::subtitle_label(s), "Français · SRT · forcés");
|
|
s.is_forced = false;
|
|
s.is_hearing_impaired = true;
|
|
s.is_external = true;
|
|
CHECK_EQ(api::subtitle_label(s), "Français · SRT · SDH · externe");
|
|
CHECK_EQ(api::subtitle_label(stream(api::StreamKind::Subtitle, "PGSSUB", "fre")),
|
|
"Français · PGS");
|
|
CHECK_EQ(api::subtitle_label(stream(api::StreamKind::Subtitle, "ass", "eng")), "Anglais · ASS");
|
|
CHECK_EQ(api::subtitle_label(stream(api::StreamKind::Subtitle, "dvd_subtitle", "ger")),
|
|
"Allemand · VobSub");
|
|
|
|
CHECK_EQ(api::audio_codec_name("dca"), "DTS");
|
|
CHECK_EQ(api::audio_codec_name("pcm_s16le"), "PCM");
|
|
CHECK_EQ(api::audio_codec_name("xyz"), "XYZ");
|
|
return testfw::test_failures();
|
|
}
|