using Flaro.Core.Library;
namespace Flaro.Core.Tests;
/// Welche Schreibweisen denselben Film meinen — und welche nicht.
public class TitelschluesselTests
{
[TestCase("Dr. Dolittle 2", "Dr Dolittle 2")]
[TestCase("Spider-Man", "Spider Man")]
[TestCase("WALL·E", "WALL-E")]
[TestCase("Amélie", "Amelie")]
[TestCase("The Matrix", "the matrix")]
[TestCase("Ich einfach unverbesserlich!", "Ich einfach unverbesserlich")]
public void Gleiche_Titel_trotz_anderer_Schreibweise(string a, string b) =>
Assert.That(Titelschluessel.Von(a), Is.EqualTo(Titelschluessel.Von(b)), $"„{a}" + $"\" und „{b}\"");
/// Hier endet die Toleranz — und das ist Absicht.
///
///
/// Ein zusammengelegter Film lässt sich nicht mehr trennen, ohne zu
/// wissen, welche Datei wohin gehörte. Zwei Einträge für einen Film sind
/// ärgerlich; ein Eintrag für zwei Filme ist Datenverlust.
///
[TestCase("Spider-Man", "Spiderman")]
[TestCase("Der Pate", "Der Pate 2")]
[TestCase("Dune", "Dune Part Two")]
public void Verschiedene_Titel_bleiben_verschieden(string a, string b) =>
Assert.That(Titelschluessel.Von(a), Is.Not.EqualTo(Titelschluessel.Von(b)));
[Test]
public void Ein_fehlendes_Jahr_passt_auf_jedes() =>
Assert.That(Titelschluessel.Gleich("Descendants 2", null, "Descendants 2", 2017), Is.True);
/// Die beiden „Dune" dürfen nie verschmelzen.
[Test]
public void Zwei_bekannte_Jahre_trennen() =>
Assert.That(Titelschluessel.Gleich("Dune", 1984, "Dune", 2021), Is.False);
[Test]
public void Leeres_passt_auf_nichts()
{
Assert.That(Titelschluessel.Von(""), Is.Empty);
Assert.That(Titelschluessel.Gleich("", null, "", null), Is.False,
"Zwei namenlose Einträge sind nicht derselbe Film.");
}
}
/// Welche Fassung eine Datei ist — 4K, Mobil, Director's Cut.
public class FassungTests
{
[TestCase("The Matrix (1999) - Mobil.mp4", "Mobil")]
[TestCase("The Matrix (1999) - optimiert.mp4", "Mobil")]
[TestCase("The Matrix (1999) - 2160p.mkv", "2160p")]
[TestCase("The Matrix (1999) {edition-Director's Cut}.mkv", "Director's Cut")]
[TestCase("Mobil/The Matrix (1999).mp4", "Mobil")]
[TestCase("The Matrix (1999) - Extended.mkv", "Extended")]
public void Erkennt_die_Fassung(string pfad, string erwartet) =>
Assert.That(FileNames.Fassung(pfad), Is.EqualTo(erwartet));
/// Eine Veröffentlichungsgruppe ist keine Fassung.
///
///
/// Nähme man jedes Wort hinter dem letzten Bindestrich, hiesse eine
/// Fassung „YIFY" oder „GRP". Lieber kein Name als ein falscher — dann
/// greift der Rückfall über die Bildhöhe.
///
[TestCase("The Matrix (1999) - YIFY.mkv")]
[TestCase("The Matrix (1999).mkv")]
[TestCase("Filme/The Matrix (1999).mkv")]
public void Raet_nicht(string pfad) => Assert.That(FileNames.Fassung(pfad), Is.Null);
/// Der Fassungszusatz darf nie im Titel landen.
[Test]
public void Die_Fassung_bleibt_aus_dem_Titel_heraus()
{
Assert.That(FileNames.ParseMovie("The Matrix (1999) - Mobil.mp4").Title, Is.EqualTo("The Matrix"));
Assert.That(FileNames.ParseMovie("The Matrix (1999) - 2160p.mkv").Title, Is.EqualTo("The Matrix"));
}
/* ---------- Bindewörter ---------- */
/// „Hanni und Nanni" und „Hanni & Nanni" sind derselbe Titel.
///
///
/// Der Fall, an dem ein ganzer Film verschwand. Auf der Platte
/// heisst er „Hanni und Nanni", bei TMDB „Hanni & Nanni" — das
/// Kaufmanns-Und fiel als Sonderzeichen heraus, das Wort „und" blieb
/// stehen. Die Namensgleichheit griff deshalb nie, und gewählt wurde der
/// erstbeste Treffer: „Hanni & Nanni 3". Beide Dateien landeten auf
/// derselben Kennung, und Teil 1 war nicht mehr zu sehen.
///
[TestCase("Hanni und Nanni", "Hanni & Nanni")]
[TestCase("Batman and Robin", "Batman & Robin")]
[TestCase("Tom und Jerry", "Tom & Jerry")]
public void Bindewoerter_machen_keinen_Unterschied(string eines, string anderes)
{
Assert.That(Titelschluessel.Von(eines), Is.EqualTo(Titelschluessel.Von(anderes)));
}
/// Eine Folgennummer bleibt ein Unterschied.
[Test]
public void Eine_Nummer_bleibt_ein_Unterschied()
{
Assert.That(Titelschluessel.Von("Hanni und Nanni"),
Is.Not.EqualTo(Titelschluessel.Von("Hanni & Nanni 3")));
}
/// Am Anfang gehört das Wort zum Titel.
///
///
/// „Und dann kam Polly" fängt mit einem Bindewort an — es wegzulassen
/// machte daraus „dann kam Polly", und das ist ein anderer Film.
///
[TestCase("Und dann kam Polly")]
[TestCase("And Then There Were None")]
public void Am_Anfang_bleibt_das_Wort_stehen(string titel)
{
Assert.That(Titelschluessel.Von(titel), Does.StartWith(
titel.Split(' ')[0].ToLowerInvariant()));
}
/// Zwei Wörter bleiben zwei Wörter.
///
///
/// Bei „Ich und" bliebe sonst nur „Ich" übrig — und das passt dann auf
/// jeden Film, der so anfängt.
///
[Test]
public void Aus_zwei_Woertern_wird_nichts_gestrichen()
{
Assert.That(Titelschluessel.Von("Krieg und"), Is.EqualTo("krieg und"));
}
}