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); } }