using Flaro.Core.Media;
namespace Flaro.Core.Tests;
/// Wann ein Kapitel der Abspann ist — und wann nicht.
///
///
/// Der Anlass. Die Helligkeitssuche findet, was dunkel ist, und
/// scheitert zweimal gemessen an genau dem Gegenteil: „Alice im
/// Wunderland" legt den Abspann über verzierte Hintergründe,
/// „(T)Raumschiff Surprise" zeigt darin Outtakes — Schwelle 49,4, letzte
/// Probe 1, und die dunkle Strecke war drei Sekunden lang. Ein Kapitel
/// sagt es genau, wenn die Datei eines hat.
///
public class AbspannkapitelTests
{
private static readonly Abspannregeln Regeln = Abspannregeln.Vorgabe;
private const double Laufzeit = 7200;
[Test]
public void Ein_benanntes_Kapitel_am_Ende_zaehlt()
{
var kapitel = new List
{
new(0, 600, "Opening"),
new(600, 6600, "Der Film"),
new(6600, 7200, "End Credits"),
};
Assert.That(Abspannkapitel.Suchen(kapitel, Laufzeit, Regeln), Is.EqualTo(6600));
}
/// Deutsch genauso — beides kommt in derselben Sammlung vor.
[Test]
public void Abspann_auf_Deutsch_auch()
{
var kapitel = new List { new(6900, 7200, "Abspann") };
Assert.That(Abspannkapitel.Suchen(kapitel, Laufzeit, Regeln), Is.EqualTo(6900));
}
/// „Chapter 12" ist keine Auskunft.
///
///
/// Das letzte Kapitel ist nicht automatisch der Abspann — bei vielen
/// Dateien ist es die Schlussszene. Lieber kein Fund als ein Knopf,
/// der die letzten zehn Minuten Handlung überspringt.
///
[Test]
public void Namenlose_Kapitel_zaehlen_nicht()
{
var kapitel = new List
{
new(0, 3600, "Chapter 1"),
new(3600, 7200, "Chapter 2"),
};
Assert.That(Abspannkapitel.Suchen(kapitel, Laufzeit, Regeln), Is.Null);
}
/// „Opening Credits" trägt dasselbe Wort und ist das Gegenteil.
[Test]
public void Ein_Vorspannkapitel_zaehlt_nicht()
{
var kapitel = new List { new(60, 180, "Opening Credits") };
Assert.That(Abspannkapitel.Suchen(kapitel, Laufzeit, Regeln), Is.Null);
}
/// Ein Abspannkapitel von zehn Sekunden ist keins.
[Test]
public void Zu_kurz_zaehlt_nicht()
{
var kapitel = new List { new(7190, 7200, "Credits") };
Assert.That(Abspannkapitel.Suchen(kapitel, Laufzeit, Regeln), Is.Null);
}
/// Zerfällt er in zwei, gilt der erste.
[Test]
public void Der_frueheste_Treffer_gewinnt()
{
var kapitel = new List
{
new(6600, 7100, "Closing Credits"),
new(7100, 7200, "Studio-Logo mit Credits"),
};
Assert.That(Abspannkapitel.Suchen(kapitel, Laufzeit, Regeln), Is.EqualTo(6600));
}
[Test]
public void Ohne_Kapitel_kein_Fund()
{
Assert.That(Abspannkapitel.Suchen([], Laufzeit, Regeln), Is.Null);
}
/// Ohne Laufzeit lässt sich „am Ende" nicht beantworten.
[Test]
public void Ohne_Laufzeit_kein_Fund()
{
var kapitel = new List { new(6600, 7200, "Credits") };
Assert.That(Abspannkapitel.Suchen(kapitel, 0, Regeln), Is.Null);
}
}