using Flaro.Core.Media; namespace Flaro.Core.Tests; /// Welche Sprachen eine Serie durchgehend führt. /// /// /// Der Anlass. Auf der Serienseite stand ein Menü mit zwanzig /// Sprachen, von denen die Serie zwei hatte. Die Frage dahinter — welche /// gilt für die ganze Serie — beantwortet die Schnittmenge: eine Sprache, /// die es nur in Staffel 1 gibt, taugt nicht als Einstellung für die Serie. /// public class SprachschnittTests { private static readonly Guid Eins = Guid.NewGuid(); private static readonly Guid Zwei = Guid.NewGuid(); private static readonly Guid Drei = Guid.NewGuid(); [Test] public void Was_in_jeder_Folge_liegt_kommt_durch() { var (durch, fehlt) = Sprachschnitt.Von( [(Eins, "deu"), (Eins, "eng"), (Zwei, "deu"), (Zwei, "eng")], folgen: 2); Assert.Multiple(() => { Assert.That(durch.Select(x => x.Code), Is.EquivalentTo(new[] { "deu", "eng" })); Assert.That(fehlt, Is.Zero); }); } /// Eine Sprache aus nur einer Staffel fällt weg — und wird gezählt. /// /// /// Gezählt, nicht verschwiegen. Wer Japanisch in Staffel 1 gesehen /// hat und es im Menü vermisst, hielte das sonst für einen Fehler. /// [Test] public void Was_nur_in_einer_Folge_liegt_faellt_weg() { var (durch, fehlt) = Sprachschnitt.Von( [(Eins, "deu"), (Eins, "jpn"), (Zwei, "deu")], folgen: 2); Assert.Multiple(() => { Assert.That(durch.Select(x => x.Code), Is.EquivalentTo(new[] { "deu" })); Assert.That(fehlt, Is.EqualTo(1), "Japanisch gibt es, aber nicht überall."); }); } /// „ger" und „deu" sind dieselbe Sprache. /// /// /// Sonst fiele Deutsch aus der Schnittmenge, obwohl es in jeder /// Folge liegt — nur mit zwei Kürzeln, je nachdem, womit die Datei /// erstellt wurde. Genau so sieht eine gewachsene Sammlung aus. /// [Test] public void Zwei_Kuerzel_fuer_dieselbe_Sprache_zaehlen_als_eine() { var (durch, fehlt) = Sprachschnitt.Von( [(Eins, "ger"), (Zwei, "deu"), (Drei, "de-DE")], folgen: 3); Assert.Multiple(() => { Assert.That(durch, Has.Count.EqualTo(1)); Assert.That(durch[0].Name, Is.EqualTo("Deutsch")); Assert.That(fehlt, Is.Zero); }); } /// „und" ist keine Sprache, sondern das Fehlen einer Angabe. [Test] public void Eine_unbekannte_Angabe_zaehlt_nicht_mit() { var (durch, fehlt) = Sprachschnitt.Von( [(Eins, "und"), (Eins, "deu"), (Zwei, "deu"), (Zwei, null)], folgen: 2); Assert.Multiple(() => { Assert.That(durch.Select(x => x.Code), Is.EquivalentTo(new[] { "deu" })); Assert.That(fehlt, Is.Zero); }); } /// Ohne Folgen mit Datei gibt es nichts zu schneiden. /// /// /// Und keine Division durch die Erwartung. Eine angekündigte /// Serie ohne eine einzige Datei darf kein leeres Menü mit einem Hinweis /// ergeben, sondern gar keines. /// [Test] public void Ohne_Folgen_kommt_nichts() { var (durch, fehlt) = Sprachschnitt.Von([(Eins, "deu")], folgen: 0); Assert.Multiple(() => { Assert.That(durch, Is.Empty); Assert.That(fehlt, Is.Zero); }); } /// Dieselbe Sprache zweimal in einer Folge zählt einmal. /// /// /// Zwei deutsche Tonspuren — Original und Audiodeskription — kommen vor. /// Gezählt wird die Folge, nicht die Spur; sonst käme eine Serie mit /// zwei Spuren in Folge 1 und keiner in Folge 2 auf dieselbe Zahl wie /// eine durchgehende. /// [Test] public void Zwei_Spuren_derselben_Sprache_in_einer_Folge_zaehlen_einmal() { var (durch, fehlt) = Sprachschnitt.Von( [(Eins, "deu"), (Eins, "deu")], folgen: 2); Assert.Multiple(() => { Assert.That(durch, Is.Empty, "Folge 2 hat keine deutsche Spur."); Assert.That(fehlt, Is.EqualTo(1)); }); } }