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