using Flaro.Core.Media; namespace Flaro.Core.Tests; /// Welche Kachel eine Stelle zeigt. /// /// /// Die Rechnung steht hier, weil beide Spieler sie brauchen. Web und /// App verschieben denselben Ausschnitt; zweimal formuliert driftet er /// auseinander, und eine verschobene Vorschau sieht man nicht sofort — man /// hält sie für ein ungenaues Bild. /// public class VorschauplanTests { /// Hundert Kacheln je Blatt, alle zehn Sekunden eine. private static readonly Vorschauplan Plan = new( Intervall: 10, Spalten: 10, Zeilen: 10, KachelBreite: 320, KachelHoehe: 180, Blaetter: 3); [Test] public void Der_Anfang_ist_die_erste_Kachel() { Assert.That(Plan.Kachel(0), Is.EqualTo(new Vorschaukachel(0, 0, 0))); } /// Innerhalb eines Intervalls gilt dieselbe Kachel. [Test] public void Neun_Sekunden_sind_noch_die_erste() { Assert.That(Plan.Kachel(9.9), Is.EqualTo(new Vorschaukachel(0, 0, 0))); } [Test] public void Zehn_Sekunden_sind_die_zweite() { Assert.That(Plan.Kachel(10), Is.EqualTo(new Vorschaukachel(0, 1, 0))); } /// Nach zehn Kacheln beginnt die zweite Zeile, nicht das zweite Blatt. [Test] public void Die_elfte_Kachel_steht_eine_Zeile_tiefer() { Assert.That(Plan.Kachel(100), Is.EqualTo(new Vorschaukachel(0, 0, 1))); } /// Die Ränder eines Blattes — dort verrechnet man sich. [Test] public void Der_Blattwechsel_liegt_richtig() { Assert.Multiple(() => { // Kachel 99: letzte Spalte, letzte Zeile, erstes Blatt. Assert.That(Plan.Kachel(990), Is.EqualTo(new Vorschaukachel(0, 9, 9))); // Kachel 100: erste Spalte, erste Zeile, zweites Blatt. Assert.That(Plan.Kachel(1000), Is.EqualTo(new Vorschaukachel(1, 0, 0))); }); } /// Hinter dem letzten Bild bleibt das letzte Bild stehen. /// /// /// Das Raster endet, wo ffmpeg aufgehört hat. Eine Sekunde darüber /// hinaus — bei ungenauer Laufzeit durchaus möglich — soll die /// Vorschau nicht verschwinden. /// [Test] public void Hinter_dem_Ende_gilt_die_letzte_Kachel() { Assert.That(Plan.Kachel(99_999), Is.EqualTo(new Vorschaukachel(2, 9, 9))); } /// Eine negative Stelle gibt es nicht, und sie stürzt auch nicht ab. [Test] public void Vor_dem_Anfang_gilt_die_erste_Kachel() { Assert.That(Plan.Kachel(-30), Is.EqualTo(new Vorschaukachel(0, 0, 0))); } /// Ohne Blätter gibt es nichts zu zeigen. [Test] public void Ein_leerer_Plan_liefert_nichts() { var leer = Plan with { Blaetter = 0 }; Assert.Multiple(() => { Assert.That(leer.Kachel(42), Is.Null); Assert.That((Plan with { Intervall = 0 }).Kachel(42), Is.Null); }); } [Test] public void Die_Zahlen_haengen_zusammen() { Assert.Multiple(() => { Assert.That(Plan.ProBlatt, Is.EqualTo(100)); Assert.That(Plan.Kacheln, Is.EqualTo(300)); }); } }