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